2013-05-27 2 views
0

EDIT: jsbin du problème. Voir les commentaires dans la méthode d'action testAddTom d'IndexController.ArrayController pushObject reference.type erreur

J'ai un contrôleur qui ajoute un objet modèle à un autre ArrayController dans mon application. Cependant quand je l'appelle pushObject sur la ArrayController une erreur est renvoyée ...

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

L'objet modèle n'est pas nouveau, il est déjà adjugée plus tôt. Si je reçois à la place le contenu de ArrayController, le convertis en tableau, j'appuie l'objet sur le tableau, puis je redéfinis le contenu de ArrayController.content cela fonctionne.

Ma question est pourquoi pushObject ne fonctionne pas? Cela semble être la bonne chose à faire.

exemple de code pushObject qui casse ...

App.TaskController.reopen({ 
    needs: ['reminder'], 

    showReminderForTask: function(reminder) { 
     var reminders = this.get('controllers.reminders'); 

     if (!reminders.content.contains(reminder)) { 
      reminders.pushObject(reminder); 
     } 
    } 
}); 

exemple ArrayController.content qui fonctionne ....

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); 
     } 
    } 
}); 

Répondre

0

Je suppose que votre problème est que vous essayez d'utiliser pushObject sur la contrôleur lui-même qui ne transmet pas automatiquement les objets poussés à la propriété content du contrôleur, et donc il casse.

Vous devriez plutôt faire:

App.TaskController.reopen({ 
    needs: ['reminder'], 

    showReminderForTask: function(reminder) { 
    var remindersContent = this.get('controllers.reminders.content'); 

    if (!remindersContent.contains(reminder)) { 
     remindersContent.pushObject(reminder); 
    } 
    } 
}); 

Je l'ai mis en place un jsbin qui montrent que l'utilisation pushObject sur la propriété content devrait fonctionner comme prévu.

Espérons qu'il aide

+0

Merci pour votre réponse intuitivepixel. Votre exemple fonctionne parfaitement mais lorsque vous travaillez avec des modèles, la même erreur est lancée sur pushObject. Voici un [jsbin] (http://jsbin.com/uniyel/2/edit) de ce que je veux dire. Peut-être un bug avec Ember-données? – cootetom

Questions connexes