gpt4 book ai didi

ember.js - 如何将对象添加到与 ember 数据的 hasMany 关系中

转载 作者:行者123 更新时间:2023-12-02 10:48:09 24 4
gpt4 key购买 nike

我有这两个模型:

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

App.Baskets = DS.Model.extend({
selectedItems: DS.hasMany('App.Items'),
name: DS.attr('string'),
username: DS.attr('string'),
})

现在我想做的是当用户选择一个新项目时将其添加到购物篮中。我尝试过这样做:

basket = App.Baskets.find(1);
item = App.Items.find(1);
basket.set("selectedItems", item) ;
App.store.commit();

这不会返回任何错误,但不会触发对服务器的任何请求。

或者,我尝试过这个:

basket = App.Baskets.find(1);
selectedItems = basket.get("selectedItems")
selectedItems.pushObject(App.Items.find(1))
App.store.commit();

此方法返回错误:

Uncaught TypeError: Cannot call method 'indexOf' of undefined ember.js:1691
get ember.js:1691
DS.OneToManyChange.sync ember-data.js:4572
(anonymous function) ember-data.js:424
OrderedSet.forEach ember.js:1410
DS.ManyArray.DS.RecordArray.extend.arrayContentDidChange ember-data.js:423
newFunc ember.js:1167
Ember.ArrayProxy.Ember.Object.extend.arrangedContentArrayDidChange ember.js:10600
sendEvent ember.js:3792
Ember.Array.Ember.Mixin.create.arrayContentDidChange ember.js:7933
Ember.Mixin.create.replace ember.js:11011
Ember.ArrayProxy.Ember.Object.extend.replaceContent ember.js:10476
DS.ManyArray.DS.RecordArray.extend.replaceContent ember-data.js:351
newFunc ember.js:1167
Ember.ArrayProxy.Ember.Object.extend.replace ember.js:10591
Ember.MutableArray.Ember.Mixin.create.insertAt ember.js:8398
Ember.MutableArray.Ember.Mixin.create.pushObject ember.js:8450
App.Router.Ember.Router.extend.root.Ember.Route.extend.items.Ember.Route.extend.savePreferences dashboard-app.js:218
sendRecursively ember.js:17303
sendEvent ember.js:17320
Ember.StateManager.Ember.State.extend.send ember.js:17845
ActionHelper.registeredActions.(anonymous function).handler ember.js:22673
(anonymous function) ember.js:13009
Ember.handleErrors ember.js:379
(anonymous function) ember.js:13003
v.event.dispatch jquery.min.js:2
o.handle.u

奇怪的是,当我尝试设置同一模型的正常属性时,比如说设置购物篮的名称,一切正常。 Ember 数据向服务器发出 PUT 请求,我的模型已更新。很明显,问题是当我更新关系时。我是否以错误的方式执行此操作,或者这是一个 ember 数据错误?

最佳答案

您的代码失败,因为在当前版本的 Ember Data 中,您必须为每个关系指定一个逆关系。

App.Item = DS.Model.extend({
provider: DS.attr('string'),
name: DS.attr('string'),
description: DS.attr('string'),
basket: DS.belongsTo('App.Basket')
});

App.Basket = DS.Model.extend({
items: DS.hasMany('App.Item'),
name: DS.attr('string'),
username: DS.attr('string'),
})

basket = App.Basket.find(1);
basket.get("items").pushObject(App.Item.find(1));
App.store.commit();

查看 Github 上的问题以了解更多详细信息。

特别是与 inverse:null 和 ManyToMany 关系有关的 WIP。

关于ember.js - 如何将对象添加到与 ember 数据的 hasMany 关系中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14004917/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com