我有两种模式:
App.Offer = DS.Model.extend({
name: DS.attr('string'),
description: DS.attr('string'),
products: DS.hasMany('product')
});
App.Product = DS.Model.extend({
name: DS.attr('string'),
description: DS.attr('string'),
offer: DS.belongsTo('offer')
});
服务器以这种方式回复记录和数组(例如,如果其余适配器要求/ offers / 1):
{ "offer": [ { "id": 1, "name": "aaaaaaaaa", "description": "aaaa", "product_ids": [ 1, 2 ] } ] }
但现在我该如何获得产品?我有这样的路线:
App.OffersRoute = Ember.Route.extend({
model: function() {
var offer = this.get('store').find('offer', 1);
return offer
}
});
在Ember指南中写道,如果你想要你应该做的产品:
offer.get('products');
好的,但我应该把它放在哪里?在模型钩?在Controller属性中? 我尝试了很多东西,但我看不到产品的网络请求?id [] = 1& id [] = 2正如我预期的那样(服务器正确响应此请求);
有人可以举例说明如何在我的模板中找到优惠,产品并使用这些数据吗?
答案 0 :(得分:1)
如果你正在使用RESTAdapter,你的数据需要采用这种格式(如果你不想以这种格式返回它,你可以创建一个自定义序列化程序并修复json)。
2个不同之处:
offer
下的项目不应该是数组,因为您正在寻找一个应该是对象的项目product_ids
应为products
,product_ids
是ActiveModelAdapter / ActiveModelSerializer使用的格式。{
"offer":
{
"id":1,
"name":"aaaaaaaaa",
"description":"aaaa",
"products":[
1,
2
]
}
}
如果您希望在单独的有效负载中返回hasMany关系,则应将其标记为异步。
App.Offer = DS.Model.extend({
name: DS.attr('string'),
description: DS.attr('string'),
products: DS.hasMany('product', {async:true})
});
我在下面的jsbin中将它连接起来,但是如果你检查网络标签,我没有勾选products?ids[]=1&ids[]=2
(注意ids[]=
,而不是id[]=
)的结果我会看到发出的请求(但由于没有结果,它会崩溃)。