gpt4 book ai didi

javascript - Backbone 搜索多模型

转载 作者:行者123 更新时间:2023-11-28 09:44:44 25 4
gpt4 key购买 nike

我最近一直在尝试使用 Backbone,并有一个非常基本的问题。

我需要搜索不同类型的记录,搜索 API 返回一个 JSON 响应,例如

{ foo: 
[
{ name: 'foo1', url: '/foo1' },
{ name: 'foo2', url: '/foo2' }
],
bar:
[ { name: 'bar1', url: '/bar1' } ],
baz:
[ { name: 'baz1', url: '/baz1' } ]
}

我有 Foo、Bar 和 Baz 的 Backbone 模型。获取时应该到达我的服务器并为我提供搜索结果的集合。我尝试过类似的事情

window.searchEntities = Backbone.Collection.extend({
url: '/get_search_results'

model: function(attrs, options) {
//Typecast the JSON to Foo, Bar and Baz Models
});
});

但是,我不知道如何解析服务器返回的结果,以便我的集合包含模型 Foo、Bar 和 Baz?或者我应该调整服务器返回的结果,以便更容易用 Backbone 处理这个问题?

最佳答案

正如我所见,您的 JSON 没有返回 3 个不同的模型,而是返回 3 个不同的集合,因为其中 3 个包含数组。

我认为你应该从头开始,如果我理解你想要返回一堆不同类型的模型,那么我们可以说:

[
{
type: "Foo",
name: "foo1",
url: "/foo1"
},

{
type: "Foo",
name: "foo2",
url: "/foo2"
},

{
type: "Bar",
name: "bar1",
url: "/bar1"
},

{
type: "Baz",
name: "baz1",
url: "/baz1"
},
]

我在那里看到了一个集合,还有不同类型的不同模型。

现在让我们看看 SearchCollection,我认为您无法像示例中所示那样使用 model 属性,所以假设所有模型都有一个共同的模型父级 Result :

window.SearchEntities = Backbone.Collection.extend({
url: '/get_search_results'

model: Result
});

从这里我们可以做得很简单,如果没有真正需要,就不要创建 Result 的子类:

window.Result = Backbone.Model.extend({
initialize: function(){
this.url = this.get( "url" );
}
});

你就完成了:

var searchEntities = new window.SearchEntities();
searchEntities.fetch();

// ... wait for the fetch ends

searchEntities.at(0).get( "type" ); //=> "Foo"

但我还是感觉不舒服,有两个原因:

  • 我不清楚您为什么要使用 Result.url
  • 您的模型的 id 在哪里?这对于 Backbone 来说非常重要。

关于javascript - Backbone 搜索多模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11954771/

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