EDIT: jsbin of problem. See comments in the testAddTom action method of IndexController.
I have a controller that adds a model object to another ArrayController in my app. However when I call pushObject on the ArrayController an error is thrown...
Uncaught TypeError: Cannot call method '_create' of undefined ember-data-latest.js:2769 DS.Store.Ember.Object.extend.materializeRecord ember-data-latest.js:2769 DS.Store.Ember.Object.extend.recordForReference ember-data-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
The model object isn't new, it's already fetched earlier on. If I instead get the ArrayController content, convert it to an array, push the object to the array and then re-set the ArrayController.content it works okay.
My question is why isn't pushObject working? It seems the right thing to do.
pushObject code sample which breaks...
App.TaskController.reopen({
needs: ['reminder'],
showReminderForTask: function(reminder) {
var reminders = this.get('controllers.reminders');
if (!reminders.content.contains(reminder)) {
reminders.pushObject(reminder);
}
}
});
ArrayController.content example which works....
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);
}
}
});