Lost.Router.map(function() {
this.resource('countries',{path: '/'}, function(){
this.resource('country',{path: ':country_id'},function(){
this.resource('city',{path: ':city_id'});
});
});
});
我的国家/地区型号
Lost.Country = DS.Model.extend({
countryCode: DS.attr('string'),
countryName: DS.attr('string'),
places: DS.hasMany('place')
});
我的地方模型是
Lost.Place = DS.Model.extend({
cityName: DS.attr('string'),
country: DS.belongsTo('country')
});
在国家模型中,当我更改地点以使此工作正常 但当我把它作为地方我得到错误
TypeError: Cannot set property 'store' of undefined
DEBUG: Ember : 1.6.0-beta.1+canary.3bcd9bdc
DEBUG: Ember Data : 1.0.0-beta.7+canary.d5562867
DEBUG: Handlebars : 1.3.0
DEBUG: jQuery : 1.11.0
已更新
从rails服务器返回的对象
Acual JSON:
{
"countries":[
{
"id":1,
"countryCode":"BH",
"countryName":"Bhutan",
"places":[
{
"id":1,
"country_id":1,
"cityName":"Daga"
},
{
"id":2,
"country_id":1,
"cityName":"Ha"
}
]
}
]
}
以下是我的rails序列化程序的外观
application_serializer.rb
class ApplicationSerializer < ActiveModel::Serializer
embed :ids, :include => true
end
country_serializer.rb
class CountrySerializer < ActiveModel::Serializer
attributes :id, :countryCode, :countryName
has_many :places
end
place_serializer
class PlaceSerializer < ActiveModel::Serializer
attributes :id, :country_id, :cityName
#belongs_to :country #commented out because gives error"undefine method belongs_to"
#if i change it to has_one gives error"stack level too deep"
end
* * Additon to anwer * * 这个问题已由@ kingpin2k回答 作为答案的一部分,如果你是像我这样的新开发人员,而不是编写自己的normalizeAttribute函数,我认为在ember-data中存在的DS.RESTAdapter中使用已经存在的normalizeAtrribute函数会更好。不容易出错。 只是复制粘贴它为我工作
Ember数据:1.0.0-beta.6
答案 0 :(得分:1)
Lost.Place = DS.Model.extend({
cityName: DS.attr('string'),
country: DS.belongsTo('Country')
});
应该是(小写国家)
Lost.Place = DS.Model.extend({
cityName: DS.attr('string'),
country: DS.belongsTo('country')
});
我无法从你的问题中说出来,但json应该是一个地方的id数组。
如果您正在使用ActiveModelSerializer
,那么您可以将嵌入设置为始终,这是您尝试返回的方式。您的数据会导致一些小问题,因为它会将countryCode
视为country_code
,但您可以覆盖某些功能来修复此验证,或者您可以修复您的json以匹配预期数据
App.ApplicationAdapter= DS.ActiveModelAdapter;
App.ApplicationSerializer = DS.ActiveModelSerializer.extend(DS.EmbeddedRecordsMixin, {
attrs: {
places: {embedded: 'always'}
},
normalizeAttributes: function(type, hash) {
//your attributes shouldn't be normalized
}
});
Lost.Country = DS.Model.extend({
countryCode: DS.attr('string'),
countryName: DS.attr('string'),
places: DS.hasMany('place')
});