Emberjs计算属性可以依赖于其他模型属性吗?

时间:2012-10-19 15:52:00

标签: ember.js

我有一个模特:

app.ObjectOne = Em.Object.extend({
    id: null,
    count: null
});

另一个模型,计算属性'SomeProperty'我想依赖于来自ObjectOne的属性'count'

app.ObjectTwo = Em.Object.extend({
    id: null,
    someProperty: function(){
      return count+5;
    }.property('app.SomeObjectController.count')

});

那么,我可以这样做吗? 或者还有其他方法可以做到这一点;

主要思想是ObjectOne模型的数据来自ObjectTwo,所以我要重新计算属性和重新呈现视图

1 个答案:

答案 0 :(得分:2)

如果我理解得很好,你想要的行为正是Ember.js带给你的。

首先,这是一个非常基本的模板:

<script type="text/x-handlebars">
  Here, the template is updated each time this property is updated (equivalent to bound property)
  {{App.objectTwo.someProperty}}
</script>​

这是javascript。我不知道你是否真的想在这里使用ObjectController,但你提到它,所以我使用它。 ObjectController充当它的content属性的代理。这意味着someObjectController.get('count')将尝试从控制器本身获取count属性,如果它不存在,则控制器从其内容中检索count属性。

App = Ember.Application.create();
App.someObjectController = Ember.ObjectController.create();

App.ObjectOne = Em.Object.extend({
  id: null,
  count: null
});
App.objectOne = App.ObjectOne.create({
  id: 1,
  count: 42
});
App.someObjectController.set('content', App.objectOne);

App.ObjectTwo = Ember.Object.extend({
  id: null,
  someProperty: function(){
    return App.someObjectController.get('count')+5;
  }.property('App.someObjectController.count')
});
App.objectTwo = App.ObjectTwo.create({
  id: 1
});

//in 3 seconds the count property is set to 0. You can see the template is updated
Ember.run.later(function(){
   App.objectOne.set('count', 0);
},3000);

这是工作的jsfiddle:http://jsfiddle.net/Sly7/M3727/4/