【问题标题】:EmberJS - Update computed properties when same value is assigned to dependent propertyEmberJS - 当相同的值分配给依赖属性时更新计算属性
【发布时间】:2013-07-03 19:20:52
【问题描述】:

在我的 ember 应用程序中,有一个模型的属性可能会或可能不会更改的事件。我的控制器中还有一个计算属性,它依赖于我的模型属性和我的应用程序中的另一个变量(不属于模型)。

即使模型的属性在偶数触发时没有改变,其他应用程序变量也会改变,这会影响控制器的计算属性,我希望这些更改能够反映在事件触发上。

我注意到,如果分配了相同的值,ember 不会“更新”属性,而且我似乎找不到强制更新的方法。

现在我有一个奶酪修复,如果模型的属性没有改变,我将值更改为其他值,然后将其重置为原来的值以触发控制器的计算属性。这不是很有效或干净。有没有其他方法可以解决这个问题?

编辑: 简要说明我正在做的事情......

session.other_application_var = [1, 2];

App.MyModel = Ember.Object.extend({
  model_prop: 1
});

//an instance of MyModel is assigned to the index route's model

App.IndexController = Ember.ObjectController.extend({
  comp_prop: function(){
    var sum = this.get('model.model_prop');
    session.other_application_var.forEach(function(num){
      sum += num;
    });
    return sum;
  }.property('model.model_prop)
});

所以基本上,如果我更改 session.other_application_var,例如添加另一个元素,我希望 comp_prop 更新。

【问题讨论】:

  • 你能展示一下你在做什么的代码吗?

标签: javascript properties ember.js dependencies


【解决方案1】:

您可以使用特殊的@each property 来观察数组的变化。以下更改意味着 comp_prop 将在 model.model_prop 或 'App.otherStuff.@each' 更改时更新。

App = Ember.Application.create({
  otherStuff: [2,3,4]
});

App.IndexController = Ember.ObjectController.extend({
  comp_prop: function(){
    var sum = this.get('model.model_prop');
    var otherStuff = App.get('otherStuff');
    otherStuff.forEach(function(num){
      sum += num;
    });
    return sum;
  }.property('model.model_prop', 'App.otherStuff.@each')
}

Full working example JSBin

【讨论】:

  • 那么没有办法观察不在 Ember 应用程序中的变量?
  • 我认为这是真的。 Ember 在内部处理观察/数据绑定细节,因此它仅适用于 ember 变量。
猜你喜欢
  • 2020-05-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-17
  • 1970-01-01
  • 2014-11-29
  • 2012-02-01
  • 2021-09-06
相关资源
最近更新 更多