2013-05-27 24 views
0

編輯:jsbin的問題。請參閱IndexController的testAddTom操作方法中的註釋。ArrayController pushObject reference.type error

我有一個控制器,將模型對象添加到我的應用程序中的另一個ArrayController。然而,當我在ArrayController上調用pushObject時會拋出一個錯誤...

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

模型對象不是新的,它早已被取出。如果我改爲獲取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

我猜你的問題是,您要在使用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這表明在content財產使用pushObject應該按預期工作。

希望它有幫助

+0

感謝您的回答,直觀的像素。你的例子完美地工作,但是當使用模型時,在pushObject上拋出同樣的錯誤。這是我的意思是[jsbin](http://jsbin.com/uniyel/2/edit)。 也許這是一個與燼數據錯誤? – cootetom