javascript - Ember 每个循环加倍。使用内部每个循环变量的值绑定(bind)到外部每个循环的变量中名称相同的属性

标签 javascript ember.js each htmlbars

为了详细说明标题,我想要实现的目标如下。

我正在 Ember 中构建一个交互式表格组件。这是剥离后的模板:

<table>
    <thead>
        <tr>
            {{#each header in headers}}
                <th>{{header}}</th>
            {{/each}}
        </tr>
    </thead>
    <tbody>
        {{#each row in rows}}
        <tr>
            {{#each header in headers}}
                <td>{{input value=row.[header]}}</td> <!-- can I bind to row.header here somehow? -->
            {{/each}}
        </tr>
        {{/each}}
    </tbody>
</table>

我希望特定行和特定列的每个输入字段都绑定(bind)到该行的 row 对象,特别是绑定(bind)到以标题列命名方式命名的属性。

本质上,我想使用 header 变量的值来绑定(bind)该值调用的行对象中的属性(如果当前 header 的值为 'title' 那么我想绑定(bind)到 row.title)

以下是我如何初始化这些对象的示例:

var headers = ['title','description'];

var rows = [],
    row = {};

for(var i = 0; i < headers.length; i++) {
    row[headers[i]] = '';  // this line does similar thing to what I am trying to achieve
}

rows.push(row);

/* This gives

    rows = [
        {
            title: '',
            description: ''
        }
    ]
*/

经过研究,我发现this在 Handlebars 文档中,我可以访问如下属性:

{{#each articles.[10].[#comments]}}
    ...
{{/each}}

根据文档,这几乎与:

articles[10]['#comments']

但是,使用:

rows.[header] 

对我不起作用,因为它尝试从字面上访问 rows 对象的 'header' 属性(即 rows.header ) 而不是 header 变量中包含的值。

最佳答案

您始终可以扩展文本字段组件,并至少获得您正在寻找的值。

App.DynamicInputComponent = Ember.TextField.extend({
  row: null,
  col: null,
  value: function(){
    var row = this.get('row');
    var col = this.get('col');

    return row[col];
  }.property('row', 'col')
});

然后,在您的模板中您可以执行以下操作:

<table>
  {{#each item in model}}
  <tr>
    {{#each col in columns}}
      <td> {{ dynamic-input type='text' row=item col=col }} </td>
    {{/each}}
  </tr>
  {{/each}}
</table>

(部分)工作解决方案here

关于javascript - Ember 每个循环加倍。使用内部每个循环变量的值绑定(bind)到外部每个循环的变量中名称相同的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27853021/

相关文章:

jquery - 如何使用jQuery从URL显示来自youtube的视频?

JavaScript:在数组中查找具有数组子字符串的所有值

javascript - Google 脚本 - 发送电子邮件到特定列的最后一行

javascript - 如何获取 http.get 的值?

javascript - Ember 数组更新 - 无法读取未定义的属性 'destroy'

ember.js - 升级 Ember 1.9.1 时的 Handlebars 问题

javascript - Jquery:每个语句只影响第一个项目

javascript - 如何在表单中的字段下方创建警报?

javascript - 未捕获错误 : Assertion Failed: You must use Ember. set() 设置

jquery 每个只输出 JSON 的第一次迭代