【问题标题】:cleaning up the controllers in Ember.js清理 Ember.js 中的控制器
【发布时间】:2013-10-31 22:33:20
【问题描述】:

当我们退出适当的路线时,控制器会发生什么?设置在那里的观察员继续做他们的工作是正确的吗?如果是这样,避免这种情况的正确方法是什么?与setupController相反的一些方法?

【问题讨论】:

    标签: ember.js ember-router ember-controllers


    【解决方案1】:

    是的,观察者仍然存在,我通常对观察者观察另一个可能在另一个屏幕中更改的属性所做的事情是,我在激活/停用路由的挂钩中手动设置/删除它们,如下所示:

    var controllerWhereThePropertyToObserveIs = this.controllerFor('fancyController');
    controllerWhereThePropertyToObserveIs.addObserver('propertyToObserveForChanges', this.controllerFor('controllerWhereTheObserverWouldBe'), 'functionToFire');
    

    然后,删除它:

    var controllerWhereThePropertyToObserveIs = this.controllerFor('fancyController');
    controllerWhereThePropertyToObserveIs.removeObserver('propertyToObserveForChanges', this.controllerFor('controllerWhereTheObserverWouldBe'), 'functionToFire');
    

    【讨论】:

    • 嗯......它应该可以工作,但看起来像一个黑客。必须有更好的解决方案。问题是 Ember 的 MVC 并不是真正意义上的 MVC。我刚刚检查并发现控制器是用于装饰模型而不是任何人所期望的路由或视图(对任何 MVC 网络框架都有一些经验)。
    • 是的,你是对的,Ember 的控制器是用来装饰模型的,不是视图也不是路由。但是,这是我发现解决该问题的唯一方法。如果您找到其他解决方案,请在此处发布。
    • 我没有得到一件事。为什么他们在退出路由时删除上下文,但让控制器保持活动状态。 (github.com/emberjs/ember.js/blob/master/packages/ember-routing/… row 776) 为什么不保留它,只要控制器还活着,反之亦然 - 为什么不杀死两者。
    • 尝试了您的解决方案。奇怪的是,它在退出路线之前最后一次开火。在那一刻,我观察到的变量已经没有价值了。可能 willTransition 钩子会在破坏上下文之前起作用......但这一切仍然很丑:(从来没有对一个特定的工具感到如此爱恨交织:)
    • 奇怪,这个技巧我用过很多次了,都没遇到过问题
    猜你喜欢
    • 1970-01-01
    • 2013-09-13
    • 1970-01-01
    • 2013-02-26
    • 1970-01-01
    • 1970-01-01
    • 2018-06-20
    • 2013-03-11
    • 1970-01-01
    相关资源
    最近更新 更多