如何将记录添加到Ember模型的hasMany属性?

时间:2013-09-23 18:21:39

标签: local-storage ember-data has-many

我使用的是最新的Ember Data版本1.0.0-beta。我正在尝试将对象添加到本地存储中的hasMany关系,但是遇到了一些问题。

我有两种模式:

App.Item = DS.Model.extend({
    description: DS.attr('string'),
});

App.Basket = DS.Model.extend({
  selectedItems: DS.hasMany('item'),
  name: DS.attr('string'),

})

我有一个名为“Items_descriptions”的数组,其中包含一组描述字符串。 我正在尝试使用以下方式将项目插入到篮子中:

var basket_record = App.Basket.store.createRecord('basket', { name: 'Test_record' });

var itemsarray = [];

Items_descriptions.forEach(function(description){

    var item  = App.Item.store.filter('item', function(record){return record.get('description') == description}).objectAt(0);
    itemsarray.push(item);
});

basket_record.get('selectedItems').pushObjects(itemsarray); // ***errors out here****

basket_record.save();

但是我在这行中得到以下错误:basket_record.get('selectedItems')。pushObjects(itemsarray);“:

  

未捕获的TypeError:无法读取未定义的属性'typeKey'

我也尝试使用App.Model.store.find方法,但这也不起作用:

var basket_record = App.Basket.store.createRecord('basket', { name: 'Test_record' });
var itemsarray = [];

Items_descriptions.forEach(function(description){

   App.Item.store.find('item', {'description': description}).then(function(item){

       itemsarray.push(item);
   });
});
basket_record.get('selectedItems').pushObjects(itemsarray); 

basket_record.save();

App.Mode.store.find方法有效,但它不会将数据成功添加到selectedItems属性中。检查localstorage时,正确填写了basket中的name属性,但所选Items的数组为空。

根据我的理解,App.Model.store.find返回一个promise和一个App.Model.store.filter()。objectAt(0)返回该对象本身。

知道我在这里做错了吗?任何帮助是极大的赞赏。非常感谢!

1 个答案:

答案 0 :(得分:1)

我解决这个问题的方法是将我的余烬数据更改为online version。我使用的是下载版本的ember数据(9月13日下载)。但是在过去的十天里,对ember-data js库进行了几次编辑。我猜测错误最初是由于以前版本中的错误而经历的。在我更新到最新的在线版本的ember数据后,hasMany关系现在正在更新。

仅供参考:我使用App.Model.store.filter(..)。objectAt(0)的第一个方法来获取对象并将其设置为hasMany关系。