无法调用未定义的ember方法'set'

时间:2014-03-03 16:44:54

标签: ember.js

当我从ArrayController中删除项目时,我无法调用未定义对象的方法'set'。

start: function () {
    this.registerModel('listController', Ember.ArrayController.create());
    this._super();
},

我的观点看起来像,

 {{#each item in marketingListCriteriaList}}          
   {{view Select valueBinding="item.entity" contentBinding="controller.allEntities" optionLabelPath="content.Name" optionValuePath="content.Name"  }}
 {{/each}} 

我有观察者观察的方法      .observes( 'listController。@ each.entity')

当我使用removeObject()方法从数组控制器中删除对象时,会调用上面的观察者。

还有其他方法可以从数组中删除对象吗?

entityChangeObserver: function (thisModule) {
    var thisModule = this;
    var criteria = thisModule.get('listController.content');
    if (criteria != undefined && criteria.length > 0 && criteria[criteria.length - 1].entity != undefined) {
        var presentObject = criteria[criteria.length - 1];
        $.each(thisModule.get('allEntities'), function (index, item) {
            if (presentObject.entity === item.Name) {
                presentObject.set('allAttributes', item.Attributes);
            }
        });           
    }
}.observes('listController.@each.entity'),

attributeChangeObserver: function (thisModule) {
    var thisModule = this;
    var criteria = thisModule.get('listController.content');
    if (criteria != undefined && criteria.length > 0 && criteria[criteria.length - 1].attribute != undefined) {
        var presentObject = criteria[criteria.length - 1];
        $.each(presentObject.get('allAttributes'), function (index, item) {
            if (presentObject.attribute === item.Name) {
                thisModule.setDefaulsVisibility(presentObject);
                if (item.Type === '1') {
                    presentObject.set('textVisible', true);
                }
                else if (item.Type === '2') {
                    presentObject.set('selectVisible', true);
                    presentObject.set('allValues', item.Values);                        
                }
                else if (item.Type === '3') {
                    presentObject.set('multiSelectVisible', true);
                    presentObject.set('allValues', item.Values);
                }
                else if (item.Type === '4') {
                    presentObject.set('dateVisible', true);
                }
            }
        });
    }
}.observes('listController.@each.attribute'),

2 个答案:

答案 0 :(得分:0)

您也可以使用“remove”而不是“removeObject”删除数组元素,但是,您可能需要仔细检查观察者中的逻辑,这会在删除对象时出现未定义的错误。我建议坚持删除对象,只是在观察者中修复错误。此外,请注意,如果您在阵列上循环,使用“删除”将不会立即更新车把模板。

答案 1 :(得分:0)

首先对不起后期感到抱歉。

我找到问题的解决方案“在被破坏的对象上调用set”。

在我的 didInsertElement 的控件定义中,我检查了每个设置操作的 if(!me.isDestroyed)