我正在努力删除一个视图的实例。在视图hbs上我使用每个循环来显示视图hbs。在另一个字段上,单击我向json对象添加“。”,然后将另一个字段添加到模板中。
>js>App.ApplicationView = Ember.View.extend({
anotherField: [{name: 'testname'}],
actions: {
moreFields: function(){
this.get('anotherField').pushObject({name: ''});
},
less: function(){
var counter = this.get('anotherField');
counter.shift();
this.set('anotherField', counter);
和hbs
{{#each view.anotherField}}
{{view Ember.TextField}}
{{/each}}
<button {{action 'moreFields' target='view'}}> ++ </button>
<button {{action 'less' target='view'}}> -- </button>
http://jsbin.com/iSUdiCaX/17/edit
干杯
克里斯蒂安
答案 0 :(得分:1)
当您使用shift
方法时,Ember不会收到anotherField
属性更改的通知,因此它不会更新模板。您可以在this.rerender()
操作结束时添加less
来检查此问题。
你可以:
this.propertyDidChange('anotherField')
通知已更改的财产:http://emberjs.com/api/classes/Ember.Object.html#method_propertyDidChange 使用slice
方法:http://emberjs.com/api/classes/Ember.Array.html#method_slice
var sliced = this.get('anotherField').slice(0, this.get('anotherField').length - 1);
this.set('anotherField' sliced);
我也注意到你正在使用View来处理动作,而我相信Controller会是一个更好的地方。
修改强>
嗯它取决于....我相信控制器是一个好地方,因为他们了解模型(视图也通过控制器)。如果您的anotherField
属性仅用于显示或事件处理逻辑,那么我认为将它留在view
中是个好主意。来自docs
Ember.js中的视图通常仅针对以下内容创建 原因:
当您需要复杂处理用户事件时
如果要创建可重复使用的组件
但是如果使用anotherField
属性来保持应用程序状态(用户选择,计算属性或其他操作所需),那么我相信它最好放在控制器内(因此修改它的动作)。< / p>
请记住,您的视图可以处理操作的一部分并将其发送给控制器:
actions: {
something: function() {
.....
this.get('controller').send('something') // calls send action in controller
}
}
我希望这有帮助!