ArrayController pushObject reference.type错误

时间:2013-05-27 09:48:55

标签: ember.js

编辑: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);
        }
    }
});

1 个答案:

答案 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应该可以正常工作。

希望有所帮助