【问题标题】:passing hard-coded arguments to view in ember.js传递硬编码参数以在 ember.js 中查看
【发布时间】:2013-07-27 14:07:45
【问题描述】:

我正在尝试显示我在 ember.js 中创建的简单通用数据表视图。

我想像这样将列传递给它:

App.MyDatatableView columnsBindings="['col1','col2']" }}

或:

App.MyDatatableView columnsBindings=['col1','col2'] }}

但两者都不起作用。在这两种情况下,我的列属性都是“未定义”。

我的观点是这样的:

App.MyDatatableView = Ember.View.extend({
    templateName : 'datatable',
    attributeBindings: ['columns'],
    columns : []
});

我的另一个选择是必须从视图继承,但如果你可以只传递把手模板中的值会更好。

感谢您的帮助, 杰森

【问题讨论】:

    标签: data-binding ember.js


    【解决方案1】:

    Handlebars 不支持将数组传入绑定。您需要传入一个包含这些列值的属性。例如在您的控制器使用中,

    App.MyController = Ember.Controller.extend({
      columns: function() {
        return ['col1', 'col2'];
      }.property()
    });
    

    然后您可以在模板中使用此columns 属性,例如,

    {{MyDatatableView columnsBindings=columns}}
    

    编辑:车把助手。

    handlebars 视图助手可以解析出计算属性中的列字符串。对于复杂的解析,你也可以使用JSON.parse,这个例子只是用逗号分开。

    助手注册,

    Ember.Handlebars.helper('MyDatatableView', App.MyDatatableView);
    

    具有cols 计算属性的对应视图。

    App.MyDatatableView = Ember.View.extend({
      cols: function() {
        return this.get('columns').split(',');
      }.property('columns'),
      didInsertElement: function() {
        console.log('didInsertElement', this.get('cols'));
      }
    });
    

    在模板中使用助手,

    {{MyDatatableView columns="col1,col2"}}
    

    【讨论】:

    • 我明白了,谢谢。您如何看待传递字符串并使用 JSON.parse()?我不喜欢仅仅为了传递一些信息而制作一个对象
    • 我想,您可以在自定义 Handlebars 助手中使用 JSON.parse
    • 嗯,你知道我可以如何轻松地扩展视图助手吗?因为我只需要添加这个功能
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-01-13
    • 1970-01-01
    • 2011-01-29
    • 2014-10-02
    • 1970-01-01
    • 2014-10-05
    • 2015-11-03
    相关资源
    最近更新 更多