Javascript 主干关系未正确设置反向关系?
我正在尝试使用在我的应用程序中设置一些关联 基本上我有主干Javascript 主干关系未正确设置反向关系?,javascript,backbone.js,backbone-relational,Javascript,Backbone.js,Backbone Relational,我正在尝试使用在我的应用程序中设置一些关联 基本上我有主干Search和Service模型。搜索有一个包含许多服务的ServiceList集合 但是,我似乎无法从服务初始值设定项中访问父搜索。当我尝试记录父搜索时,我得到null。有人能看出我做错了什么吗 我的搜索模型是这样设置的(代码可能有语法错误,我正在动态地从coffeescript进行翻译): 或者,如果您更喜欢咖啡脚本: class Search extends Backbone.RelationalModel urlRoot: '
Search
和Service
模型。搜索有一个包含许多服务的ServiceList
集合
但是,我似乎无法从服务初始值设定项中访问父搜索。当我尝试记录父搜索时,我得到null
。有人能看出我做错了什么吗
我的搜索模型是这样设置的(代码可能有语法错误,我正在动态地从coffeescript进行翻译):
或者,如果您更喜欢咖啡脚本:
class Search extends Backbone.RelationalModel
urlRoot: '/searches'
relations: [
type: Backbone.HasMany
key: 'services'
relatedModel: 'Service'
collectionType: 'ServiceList'
reverseRelation:
key: 'search'
]
initialize: (options) ->
// => Search "has services:", ServiceList
console.log this, "has services:", @get('services')
class Service extends Backbone.RelationalModel
initialize: ->
// => Service "in" null
console.log this, "in", @get('search')
简短回答 在服务的initialize方法中,您根本无权访问反向关系的值 反向关系的值在初始化完成后设置 更长的答案 假设这个javascript:
Search = Backbone.RelationalModel.extend({
urlRoot: '/searches',
relations: [{
type: Backbone.HasMany,
key: 'services',
relatedModel: 'Service',
reverseRelation: {
key: 'search'
}
}],
initialize: function(options) {
console.log(this, "has services:", this.get('services'));
}
});
Service = Backbone.RelationalModel.extend({
initialize: function() {
console.log(this, "in", this.get('search'));
}
});
使用相关服务创建新的搜索模型时:
s1 = new Search({name:"Some Search",services:[{name:"service1"},{name:"service2"}]});
将要发生的是:
new Service model created (for service1) - name set to "service1"
(but, since what got passed to the model for properties is {name:"service1"}
you can see how this model cannot know its reverse relation yet.)
new Service model created (for service2) - name set to "service2"
(same as above)
new Search model created (for 'some search')
name set to 'some search'
service1 Service model added to Search.services
(triggers 'update:search' event on Service1 model)
service2 Service model added to Search services
(triggers 'update:search' event on Service2 model)
直到service1和service2服务模型被添加到Search.services集合中,service1.Search和service2.Search上的反向关系才被设置
这里有一个JS提琴,显示了控制台中的操作顺序:是的,您发布的JS非常不正确。你能把原来的咖啡剧本贴出来吗?
new Service model created (for service1) - name set to "service1"
(but, since what got passed to the model for properties is {name:"service1"}
you can see how this model cannot know its reverse relation yet.)
new Service model created (for service2) - name set to "service2"
(same as above)
new Search model created (for 'some search')
name set to 'some search'
service1 Service model added to Search.services
(triggers 'update:search' event on Service1 model)
service2 Service model added to Search services
(triggers 'update:search' event on Service2 model)