2014-06-13 2 views
1

Dans Ember, j'ai une application dans laquelle j'ai un contrôleur externe dont le template est rendu dans un {{outlet}} standard. Cependant, le modèle contient une sortie nommée {{outlet details}}, et l'une des actions de ce contrôleur fait transitionToRoute() qui rend à l'intérieur de cette sortie "details", et il y a un contrôleur interne qui gère les imbriqués modèle.Ember.JS - envoi d'un message du contrôleur interne au contrôleur externe

Ce que je dois faire est d'avoir une action sur le modèle interne/contrôleur déclencher une action sur le contrôleur externe. Il semble que Ember ne peut pas briser la barrière de «sortie». Les événements se produisent uniquement dans le point de vente et non dans les points de vente.

choses que j'ai essayé:

  1. Essayé this.send() et this.sendAction().
  2. Essayé d'injecter le contrôleur externe dans le contrôleur interne (needs: "main", principal: Ember.computed.alias ("controllers.main")) - entraîne une erreur "non défini n'est pas une fonction".
  3. L'utilisation de la balise {{action}} dans le modèle imbriqué et l'envoi d'une action qui existe sur le contrôleur parent - aboutit à "Nothing géré l'action 'selectTab' .Si vous avez géré l'action, cette erreur peut être provoquée en renvoyant true à partir d'un gestionnaire d'actions dans un contrôleur, provoquant l'erreur de bulle d'action ".

Est ce que j'essaie même possible? Je sais que je pourrais simuler cela en utilisant jQuery, mais je préfère ne pas avoir à le faire, je préfère le faire de la manière "braise" (s'il y en a une).

Répondre

2

Numéro 2 œuvres

App.IndexRoute = Ember.Route.extend({ 
    model: function() { 
    return ['red', 'yellow', 'blue']; 
    }, 
    renderTemplate: function(){ 
    this.render(); 
    var fooCont = this.controllerFor('foo'); 
    this.render('foo',{ 
     into:'application', 
     outlet:'foo', 
     controller:fooCont 
    }); 
    } 
}); 

App.ApplicationController = Em.Controller.extend({ 
    actions:{ 
    hello: function(val){ 
     alert(val); 
    } 
    } 
}); 

App.FooController = Em.Controller.extend({ 
    needs:'application', 
    application: Em.computed.alias('controllers.application'), 
    actions:{ 
    sendToApp: function(){ 
     this.get('application').send('hello', 'world'); 
    } 
    } 
}); 

http://emberjs.jsbin.com/qatepibu/1/edit

+0

Kingpin2k ... Vous êtes prolifiquement épique! :) <3 –

Questions connexes