为什么在更新模型时重新初始化Controller?

基阿苏鲁

下面是我的问题的一个小玩具版本。

所以我有一个控制器(咖啡):

Test.PriceController = Em.ObjectController.extend
    init: ->
        this._super();
        console.log 'initialized'

和一个模型:

Test.Price = DS.Model.extend
    cost:        DS.attr 'string'

价格模型每5秒钟从数据源更新一次。每次模型更新时,控制器初始化中的console.log都会被触发。在ember文档中似乎看不到这是否是正确的行为。事实是,我想为存储最后一个“成本”值的控制器添加一个属性,但是鉴于该对象一直在重新初始化,因此在模型更新时将清除该属性。同样,如果这是正确的行为,则将意识到任何其他替代方法。

总结一下:控制器为什么要这样工作?如果是设计使然,那么存储“最后一次成本”变量的正确方法是什么,就像我上面概述的那样?

ahaurw01

由于您使用itemController每个价格的,因此您发现的重新初始化确实是设计使然。由于要替换价格对象而不是更新其属性,因此{{each}}助手创建的虚拟控制器别无选择,只能创建新的项目控制器实例来包装每个对象。请参阅显示以下行为的阵列控制器源代码的这一部分:

https://github.com/emberjs/ember.js/blob/v1.5.0/packages/ember-runtime/lib/controllers/array_controller.js#L219

ObjectController附加到路由不会发生这种情况的原因是,非项目控制器在应用程序的整个生命周期中都是长期存在的单例。

至于如何解决此问题,我建议在PricesController(您的ArrayController)中保留更长寿命的状态,并简单地让项目控制器使用needsAPI引用该状态知道项目控制器是成熟的控制器,并在需要时可以访问其他控制器,这很有用。在此处查看此示例:

http://emberjs.jsbin.com/mivoh/2/edit?html,js,输出

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

初始化有什么问题?尝试使用初始化函数初始化图形时,为什么无法成功

如果在方法内部初始化模型,为什么不能访问模型?

反应:为什么每次重新渲染都调用初始化函数时,useState返回的状态保持不变?

为什么在直接初始化和分配中传递lambda而不在复制初始化中传递lambda时,为什么会编译呢?

当它违反初始化列表的顺序规则时,为什么会起作用

SwiftUI MVVM:子视图模型在父视图更新时重新初始化

为什么每次读取属性时都不会重新评估对象初始化器中的表达式?

Lambda重新初始化向量-为什么起作用?

为什么要在循环内重新初始化常量?

为什么@SpringRunner测试在每次测试时都会重新初始化类?

当junit本身为每个测试重新初始化类时,为什么要使用@before进行类变量的重新初始化

为什么在循环中初始化数组时Rust编译器为什么会给出未初始化的变量错误?

为什么@EnvironmentObject强制视图重新初始化?

为什么要重新初始化多进程工作者?

为什么不能重新分配已完全初始化的数组?

验证时重新初始化服务

为什么初始化此类时未调用列表初始化?

为什么要初始化JSONdecoder?

为什么在android中调用camera时,活动中的所有变量(从Activity1通过intent获得)都被重新初始化?

为什么无法初始化Datareader?

与KnockoutJS结合使用时,为什么jQuery File Upload需要重新初始化?

为什么重新初始化变量后prevoius值仍然存在-PHP

每次访问View时都要重新初始化Controller-Ionic Framework

为什么我的基因剔除视图模型用不同的值初始化?

创建数组初始化器时,为什么不必须输入new?

每次使用 nntool 在 matlab 中重新训练相同模型时是否都需要初始化权重?

当 ActiveReferenceCount > 0 时,为什么对象被取消初始化

Flutter Provider 重新初始化模型

为什么在初始化后更新 JSX 时视图没有更新?