编辑:jsbin问题。请参阅IndexController的testAddTom操作方法中的注释。
我有一个控制器,可以将模型对象添加到我的应用程序中的另一个ArrayController。但是,当我在ArrayController上调用pushObject时,会抛出错误...
未捕获的TypeError:无法调用未定义的ember-data-latest.js的方法'_create':2769 DS.Store.Ember.Object.extend.materializeRecord 烬数据-latest.js:2769 DS.Store.Ember.Object.extend.recordForReference 烬数据-latest.js:1871年 DS.RecordArray.Ember.ArrayProxy.extend.objectAtContent ember-data-latest.js:309 superWrapper ember.js:1044 Ember.ArrayProxy.Ember.Object.extend.objectAt ember.js:11475 superWrapper ember.js:1044 Ember.ArrayController.Ember.ArrayProxy.extend.objectAtContent ember.js:13111 superWrapper ember.js:1044 Ember.ArrayProxy.Ember.Object.extend.objectAt ember.js:11475 superWrapper ember.js:1044 Ember.Array.Ember.Mixin.create.arrayContentDidChange ember.js:8955 Ember.ArrayController.Ember.ArrayProxy.extend.arrayContentDidChange ember.js:13147 superWrapper ember.js:1044 Ember.ArrayProxy.Ember.Object.extend.arrangedContentArrayDidChange ember.js:11582 sendEvent ember.js:2432 Ember.Array.Ember.Mixin.create.arrayContentDidChange ember.js:8946 Ember.ArrayProxy.Ember.Object.extend.arrangedContentArrayDidChange ember.js:11582 sendEvent ember.js:2432 Ember.Array.Ember.Mixin.create.arrayContentDidChange ember.js:8946 Ember.Mixin.create.replace ember.js:12016 Ember.ArrayProxy.Ember.Object.extend.replaceContent ember.js:11371 Ember.ArrayProxy.Ember.Object.extend._replace ember.js:11487 Ember.ArrayProxy.Ember.Object.extend.replace ember.js:11493 Ember.ArrayProxy.Ember.Object.extend.replaceContent ember.js:11371 Ember.ArrayProxy.Ember.Object.extend._replace ember.js:11487 Ember.ArrayProxy.Ember.Object.extend._insertAt ember.js:11501 Ember.ArrayProxy.Ember.Object.extend.pushObject
模型对象不是新的,它早先已经被提取过了。如果我改为获取ArrayController内容,将其转换为数组,将对象推送到数组,然后重新设置它可以正常工作的ArrayController.content。
我的问题是为什么pushObject不工作?这似乎是正确的做法。
pushObject代码示例,它打破了......
App.TaskController.reopen({
needs: ['reminder'],
showReminderForTask: function(reminder) {
var reminders = this.get('controllers.reminders');
if (!reminders.content.contains(reminder)) {
reminders.pushObject(reminder);
}
}
});
ArrayController.content示例有用....
App.TaskController.reopen({
needs: ['reminder'],
showReminderForTask: function(reminder) {
var reminders = this.get('controllers.reminders');
if (!reminders.content.contains(reminder)) {
var content = reminders.content.toArray();
content.push(reminder);
reminders.set('content', content);
}
}
});
答案 0 :(得分:0)
我猜你的问题是你试图在控制器本身上使用pushObject
,它不会自动将推送的对象转发到控制器的content
属性,因此会中断。
你应该这样做:
App.TaskController.reopen({
needs: ['reminder'],
showReminderForTask: function(reminder) {
var remindersContent = this.get('controllers.reminders.content');
if (!remindersContent.contains(reminder)) {
remindersContent.pushObject(reminder);
}
}
});
我整理了一个jsbin,表明在pushObject
属性上使用content
应该可以正常工作。
希望有所帮助