gpt4 book ai didi

javascript - Backbone Relational 没有正确设置反向关系?

转载 作者:搜寻专家 更新时间:2023-11-01 05:02:08 25 4
gpt4 key购买 nike

我正在尝试使用 Backbone.Relational在我的应用程序中设置一些关联。

基本上我有 Backbone SearchService 模型。搜索有一个 ServiceList 集合,其中包含许多服务。

但是,我似乎无法从服务初始值设定项中访问父搜索。当我尝试记录父搜索时,我得到了 null。谁能看出我做错了什么?

我的搜索模型是这样设置的(代码可能有语法错误,我正在从 coffeescript 即时翻译):

var Search = new Backbone.RelationalModel({
urlRoot: '/searches',

relations: [{
type: Backbone.HasMany,
key: 'services',
relatedModel: 'Service',
collectionType: 'ServiceList',
reverseRelation: {
key: 'search'
}
}],

initialize: function(options) {
// => Search "has services:", ServiceList
console.log this, "has services:", @get('services');
}
});


var Service = new Backbone.RelationalModel
initialize: function() {
// => Service "in" null
console.log this, "in", @get('search');
}
});

或者如果您更喜欢 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')

最佳答案

简答题

您根本无法在服务的初始化方法中访问反向关系的值。

反向关系的值在初始化完成后设置。

更长的答案

假设这个 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 fiddle ,它显示了控制台中的操作顺序:http://jsfiddle.net/MNh7N/6/

关于javascript - Backbone Relational 没有正确设置反向关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10029075/

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