好吧所以我遇到了这个问题,请查看
http://jsbin.com/rarubesuxutu/1/edit?html,css,js
我正在尝试在init之后发送一个事件,但事件没有得到处理。相反,行动只会出错。为什么Ember会这样处理?什么时候可以发送活动?有没有回调所以我可以设置观察员?
谢谢!
答案 0 :(得分:3)
好的,我明白了。我误解了回调的顺序。
Here is my updated version。虽然它没有修复,但它有助于理解路由和控制器初始化的顺序。在路由IndexController
之前调用setupController
init。这会在路由设置之前触发事件。
答案 1 :(得分:0)
好的,所以我不确定你为什么要在init之后立即发送一个动作,因为你应该能够在setupController或控制器初始阶段定义所有变量,所以我将告诉你如何我会去做的。 JSBIN
有效的是你可以做的是控制器的init,你可以这样做:
theTruth: false,
setTheTruth: function(){
this.set('theTruth', true);
}.on('init'),
然后你可以让观察者观察这个变量的变化,如下所示:
truthChanged:function(){
console.log("TRUTH HAS CHANGED");
}.observes('this.theTruth'),
理想情况下,您可以通过利用路由setupController函数来放弃所有这些,如JSBIN
setupController: function(controller, model) {
controller.set('model', model);
controller.set('theTruth', true);
},
这样你甚至不会处理init事件中的任何事情。但是,假设您有一个要求使您必须对init事件执行任何操作,则应将观察者与.on('init')事件分开,并让它们分开共存。如果这对您有用,请告诉我。