EmberJS-当相同的值被分配给依赖属性时,更新计算的属性

EmberJS - Update computed properties when same value is assigned to dependent property

本文关键字:属性 依赖 计算 更新 分配 EmberJS-      更新时间:2023-09-26

在我的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进行更新。

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

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')
}

完整的工作示例JSBin