每次加载一条路由时,Ember的观察者/运行计划



我在Ember控制器中有一个属性,它有一个观察者。当我第一次访问页面/路由时,以及当我改变值绑定的a下拉菜单时(如预期的那样),这个函数会被调用。

没有发生的是,当我重新访问页面并重新设置该值时,观察者被触发(与我离开页面时的值相同)。

我需要这个的原因是,该值被用作另一个函数的过滤器,而该函数在观察者内部被调用。

是否有一种方法可以使观察者着火,即使值是相同的,因为它是以前?或者,一个明智的方式来触发一个函数(也许通过运行循环)从控制器,每次控制器加载/路由访问?

在setupController路由钩子中,你将获得controller引用,所以你可以使用它来调用观察者函数。

setupController(controller,model){
    this._super(...arguments);    
    controller.get('testObserver')();
}

我更喜欢下面的样式来观察属性。

setupController(controller, model){
    if (this.get('somelogic')) {
        controller.addObserver('yourProperty', controller, this.get('callback'));
    }
}
resetController(controller, isExisting, transition) {
    if (isExisting) {
        controller.removeObserver('yourProperty', controller, this.get('callback'));
    }
}

最新更新