我有一个侦听模型的计算属性,看起来像:
groups: function() {
let g = this.get('model.items.groups').map(function(obj) { return obj.group; });
return g.join(',');
}.property('model.items.groups'),
在我的模板中,我有以下输入字段:
{{input value=groups type="text" class="form-control" placeholder="Testme"}}
我注意到,在通过UI提供输入后,Ember检查器中groups
的值变为字符串,不再是计算属性。我如何在Ember 2.1中避免这种情况并让它只更新计算属性?
答案 0 :(得分:1)
这是因为{{input}}
助手默认使用双向绑定。当您在输入字段中写入时,它将写入value
属性。
我一直在使用dockyard's one-way-input插件,它默认为输入组件提供单向绑定。
{{one-way-input
value=groups
update=(action 'updateSomething')
}}
然后在您使用该组件的任何地方:
actions : {
updateSomething(value) {
//Do Something with the value and update model.items.groups?
}
}
这样,始终从groups
计算属性中读取值,并且操作更新值的来源(而不是计算属性)