将值属性设置为一般视图

时间:2013-09-22 10:55:56

标签: ember.js

可以通过把手将数据链接到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]

2 个答案:

答案 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');
});