我有一个模特:
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,所以我要重新计算属性和重新呈现视图
答案 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/