0

在我的应用程序中,我有一个类型的通用文本字段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'. isEditinggetReadOnlyState从模板视图的当前 objectController 中检索。

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

App.DetailTextField = Em.TextField.extend({

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

});

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

有什么想法吗?

4

1 回答 1

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);
        }
    }
});
于 2013-09-09T18:24:37.290 回答