Ember数据:未捕获TypeError:无法读取未定义的属性'push'

时间:2015-07-29 12:54:24

标签: ember.js ember-data ember-cli

我是 Ember CLI 的新手,我在创建数据后一直试图将数据推送到hasMany关系,但我得到了这个奇怪的错误Uncaught TypeError: Cannot read property 'push' of undefined一切似乎没关系this.store.createRecord()正在运作,但.findRecord .push .peekRecor d无效。

我的控制器

var VideoToAdd = this.store.find('video', this.get('ActiveCanvas'));
console.log(this.get('ActiveCanvas'));
VideoToAdd.get('hotspots').push(newHotspot);

视频模型

import DS from 'ember-data';

export default DS.Model.extend({
  title: DS.attr(),
  file: DS.attr(),
  hotspots: DS.hasMany('hotspot')
});

热点模型:

import DS from 'ember-data';

export default DS.Model.extend({
  title: DS.attr(),
  onVideo: DS.belongsTo('video'),
  toVideo: DS.attr()
});

请告诉我出了什么问题。

1 个答案:

答案 0 :(得分:3)

商店的find方法是一个异步方法,它返回一个promise(实际上是一个promise对象)。当你致电VideoToAdd.get('hotspots')时,你得到了未定义,因为承诺尚未解决;数据根本不存在。如果你等到承诺得到解决,你就可以了。

this.store.find('video', this.get('ActiveCanvas')).then(function(VideoToAdd) {
    VideoToAdd.get('hotspots').pushObject(newHotspot);
});

为了回应Tom Netzband在评论中所说的内容,你需要使用Ember友好方法将一个对象添加到数组中。 pushObjectaddObject应该有效。

相关问题