可以通过把手将数据链接到Ember.view吗?像Ember.Select with valueBindig。
我的尝试:
{{#each models}}
<li>{{id}}</li>
{{/each}}
// -> 1,2,3 (this works fine)
{{view App.TimelineView valueBinding="models.id"}} //this doesn't work
App.TimelineView = Ember.View.extend({
tagName: 'div',
attributeBindings: ["value"],
value: null,
didInsertElement: function(){
console.log(this.value)
...
})
控制台日志:---&gt;空
但我需要[1,2,3]
答案 0 :(得分:0)
假设models
是一个数组,models.id
正在访问数组本身的id
属性,而不是每个元素。您可能想要的是将模型映射到ID。
在定义models
的控制器上定义以下属性:
modelIds: Ember.computed.mapBy('models', 'id')
然后在模板中使用modelIds
而不是models.id
。
此外,您应该访问属性this.get
- 样式,而不是直接访问(例如,在didInsertElement
中)。
答案 1 :(得分:0)
您没有正确访问value
。正确的做法如下。我修复了一些错误。
App.TimelineView = Ember.View.extend({
tagName: 'div',
didInsertElement: function() {
console.log(this.get('value'));
},
)};
{{#each models}}
{{view App.TimelineView valueBinding="id"}}
{{/each}}
循环中的上下文是this,它表示迭代的当前元素,因此您需要'this.id'或简单地'id'。
添加:如果您希望一次性将所有id
列表作为数组(而不是逐项),则可以执行以下操作:
App.MyController = Ember.ArrayController.extend({
allIds: function() {
var ids = this.get('content').getEach('id').reduce(function(accum, item) {
return accum.push(item);
}, []);
return ids;
}.property('content.@each.id');
});