在我的应用中,我有一个类型为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中检索isEditing
和getReadOnlyState
。
有没有办法将classNameBindings
和readonlyBinding
放入DetailTextField
类定义中,这样就不需要明确地将其键入到DetailTextField视图的每个实例中?也就是说,DetailTextField可以获取当前上下文 - 例如:
App.DetailTextField = Em.TextField.extend({
attributeBindings: ['required', 'readonly', 'name'],
classNameBindings: "this.view.get('isEditing'):editing:viewing"
});
我可以在类定义中使isEditing
成为从控制器中检索值的函数,但我仍然遇到同样的问题,因为我不知道如何引用activeController / this.controller。
有什么想法吗?
答案 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);
}
}
});