3

我有一个模型:

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之后,所以我要重新计算属性并重新渲染视图

4

1 回答 1

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/

于 2012-10-19T17:41:05.910 回答