从Ember.TextField类获取对this.objectController属性的引用

时间:2013-09-09 17:42:59

标签: ember.js

在我的应用中,我有一个类型为Em.TextField的通用文本字段:

App.DetailTextField = Em.TextField.extend({   
    attributeBindings: ['required', 'readonly', 'name']
});

在我的模板中,我使用DetailTextField显示数据,指定属性,并在“编辑”或“查看”类中显示:

{{view App.DetailTextField viewName="tbSurname" placeholder="surname"
valueBinding="surname" required="required" classNameBindings="isEditing:editing:viewing" readonlyBinding='getReadOnlyState'}}

这很好但我有几个这些字段,所有字段都有相同的部分:classNameBindings="isEditing:editing:viewing" readonlyBinding='getReadOnlyState'。从模板视图的当前objectController中检索isEditinggetReadOnlyState

有没有办法将classNameBindingsreadonlyBinding放入DetailTextField类定义中,这样就不需要明确地将其键入到DetailTextField视图的每个实例中?也就是说,DetailTextField可以获取当前上下文 - 例如:

App.DetailTextField = Em.TextField.extend({

    attributeBindings: ['required', 'readonly', 'name'],
    classNameBindings: "this.view.get('isEditing'):editing:viewing"

});

我可以在类定义中使isEditing成为从控制器中检索值的函数,但我仍然遇到同样的问题,因为我不知道如何引用activeController / this.controller。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

要从您的视图访问控制器,只需

mycontroller = this.get('controller');

顺便说一句,我更喜欢在我的模型中添加isEditing属性,所以我不必扩展视图。

App.MyModel.reopen({
    isEditing: false
});

所以我可以循环每一个......

{{#each model}}
    {{#if isEditing}}
        {{view Em.TextField valueBinding="yourvaluebindinghere"}}
        <button {{action 'update' this}}>Update</button>
    {{else}}
        {{yourvaluebindinghere}}
        <button {{action 'edit' this}}>Edit</button>
    {{/if}}
{{/each}}

将动作放在我的控制器中:

App.MyController = Em.ArrayController.extend({
    actions: {
        edit: function(model) {
            model.set('isEditing', true);
        },

        update: function(model) {
            model.save();
            model.set('isEditing', false);
        }
    }
});