烬。如何删除视图的实例

时间:2013-12-30 12:06:56

标签: view ember.js

我正在努力删除一个视图的实例。在视图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

干杯

克里斯蒂安

1 个答案:

答案 0 :(得分:1)

当您使用shift方法时,Ember不会收到anotherField属性更改的通知,因此它不会更新模板。您可以在this.rerender()操作结束时添加less来检查此问题。

你可以:

  1. 致电this.propertyDidChange('anotherField')通知已更改的财产:http://emberjs.com/api/classes/Ember.Object.html#method_propertyDidChange
  2. 使用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);
    
  3. 我也注意到你正在使用View来处理动作,而我相信Controller会是一个更好的地方。

    修改 嗯它取决于....我相信控制器是一个好地方,因为他们了解模型(视图也通过控制器)。如果您的anotherField属性仅用于显示或事件处理逻辑,那么我认为将它留在view中是个好主意。来自docs

      

    Ember.js中的视图通常仅针对以下内容创建   原因:

         

    当您需要复杂处理用户事件时

         

    如果要创建可重复使用的组件

    但是如果使用anotherField属性来保持应用程序状态(用户选择,计算属性或其他操作所需),那么我相信它最好放在控制器内(因此修改它的动作)。< / p>

    请记住,您的视图可以处理操作的一部分并将其发送给控制器:

    actions: {
        something: function() {
            ..... 
            this.get('controller').send('something')   // calls send action in controller              
        }
    }
    

    我希望这有帮助!