来自未触发路线的控制器 属性 上的观察者
Observer on a controller property from a route not firing
我正在尝试从路线内将观察者放置在控制器 属性 上,但观察者永远不会被解雇。
这是一个基本示例,其中应用程序路由具有在子路由控制器上设置 属性 的操作。子路由在控制器的 属性 (controller.isDirty
) 上有一个观察者 (cleanup
),它永远不会被触发。我不知道为什么。
如有任何帮助,我们将不胜感激。
fiddle: http://jsfiddle.net/ujwyvhrp/3/
App = Ember.Application.create();
App.Router.map(function () {
this.route('child');
});
App.ApplicationRoute = Ember.Route.extend({
model: function () {
return true;
},
actions: {
makeDirty: function(){
this.controllerFor('child').set('isDirty', true);
}
}
});
App.ChildRoute = Ember.Route.extend({
model: function () {
return true;
},
cleanup: function(){
this.controller.set('isDirty',false);
}.observes('controller.isDirty')
});
App.ChildController = Ember.Controller.extend({
isDirty: false
});
是的,'controller' 属性 在一条路线中是不可观察的。参见 https://github.com/emberjs/ember.js/issues/9370
如果您在 setupController 中注册您的观察者(即在实例化控制器之后,如有必要),它会起作用。
App.ChildRoute = Ember.Route.extend({
model: function () {
return true;
},
setupController: function(controller, model) {
this._super(controller, model);
this.addObserver('controller.isDirty', function() {
this.controller.set('isDirty',false);
});
}
});
这不是一个完整的解决方案(有时您必须删除 Observer),但希望能为您指明正确的方向。参见:http://jsfiddle.net/ujwyvhrp/4/
本质上,这是针对 Gaurav 提到的控制器不可观察性的肮脏工作。只要控制器没有改变,这应该就可以工作(它不应该,因为它无论如何都被视为一个单例,但如果你做一些不正常的事情,它可能会成为一个问题)。
我正在尝试从路线内将观察者放置在控制器 属性 上,但观察者永远不会被解雇。
这是一个基本示例,其中应用程序路由具有在子路由控制器上设置 属性 的操作。子路由在控制器的 属性 (controller.isDirty
) 上有一个观察者 (cleanup
),它永远不会被触发。我不知道为什么。
如有任何帮助,我们将不胜感激。
fiddle: http://jsfiddle.net/ujwyvhrp/3/
App = Ember.Application.create();
App.Router.map(function () {
this.route('child');
});
App.ApplicationRoute = Ember.Route.extend({
model: function () {
return true;
},
actions: {
makeDirty: function(){
this.controllerFor('child').set('isDirty', true);
}
}
});
App.ChildRoute = Ember.Route.extend({
model: function () {
return true;
},
cleanup: function(){
this.controller.set('isDirty',false);
}.observes('controller.isDirty')
});
App.ChildController = Ember.Controller.extend({
isDirty: false
});
是的,'controller' 属性 在一条路线中是不可观察的。参见 https://github.com/emberjs/ember.js/issues/9370
如果您在 setupController 中注册您的观察者(即在实例化控制器之后,如有必要),它会起作用。
App.ChildRoute = Ember.Route.extend({
model: function () {
return true;
},
setupController: function(controller, model) {
this._super(controller, model);
this.addObserver('controller.isDirty', function() {
this.controller.set('isDirty',false);
});
}
});
这不是一个完整的解决方案(有时您必须删除 Observer),但希望能为您指明正确的方向。参见:http://jsfiddle.net/ujwyvhrp/4/
本质上,这是针对 Gaurav 提到的控制器不可观察性的肮脏工作。只要控制器没有改变,这应该就可以工作(它不应该,因为它无论如何都被视为一个单例,但如果你做一些不正常的事情,它可能会成为一个问题)。