我有一个在 {{#each}} 块中实例化的视图,因此有多个实例。每个视图都需要有一个绑定到特定于该视图实例的对象的属性。所以通常声明绑定的方式:
App.hash = Ember.Object.create({
item1: "one",
item2: "two"
});
App.MyView = Ember.View.extend({
itemBinding: "App.hash.itemN"
});
不起作用,因为当我定义绑定映射到 ( App.hash.itemN
) 时,我还不知道它应该是 item1 还是 item2(在上面的代码中由 itemN 表示)。
我找到了解决这个问题的方法,这似乎有点笨拙,并且很好奇是否有合适的方法。这是我的解决方案:
App.MyView = Ember.View.extend({
didInsertElement: function() {
this.set('stub', Ember.Object.create({
itemBinding: "App.hash."+this.get('content')}))
}
})
然后在我的模板中,我可以执行以下操作:
{{#each App.itemController}}
{{#view App.MyView contentBinding="this"}}
{{stub.item}}
{{/view}}
{{/each}}
有一个更好的方法吗?我的抱怨是我觉得我在创造一个不必要的对象。此外,如果我希望我的视图的其他属性依赖于这个特定于实例的对象,我可以说.property(stub.item)
哪个会起作用,尽管在声明它时,stub.item 还不存在。
我认为可能有某种方法涉及手动创建绑定,但我无法弄清楚。
谢谢!
更新:
我已经确认 Christopher Swasey 的解决方案有效。我在这个 Gist 中充实了它:
https://gist.github.com/2606979
这非常有帮助,因为我了解了更多关于观察和回调的知识。虽然最后,我不确定这个解决方案有多简单。尽管如此,它至少也可以工作。