从 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'),
您也可以使用"remove"而不是"removeObject"删除数组元素,但是,您可能需要仔细检查观察器中的逻辑,这在删除对象时会给出未定义的错误。我建议坚持删除对象并修复观察器中的错误。另外,请注意,如果您循环遍历数组,使用"删除"不会立即更新车把模板。
不起,帖子晚了。
我想出了"在被破坏的对象上调用集"问题的解决方案。
在我的 didInsertElement 的控制定义中,我为每个设置操作检查了 if (!me.isDestroy)。