【问题标题】:Backbone search multiple-models骨干搜索多模型
【发布时间】:2012-08-14 14:39:32
【问题描述】:

我最近一直在尝试 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 的主干模型。获取时应该访问我的服务器并为我获取搜索结果的集合。我尝试过类似

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 更轻松地处理这个问题?

【问题讨论】:

  • 我认为您只是在为这种架构打赌……另一方面,我在您的示例代码中看到很多不匹配的地方,例如您的 function 是不返回任何东西..而且我认为没有人会将attrsoptions发送到您的Collection.model()...即使您收到您的JSON请求作为attrs参数attrs['foo']与您的 JSON 示例中的任何内容都不匹配。总结:我认为你应该重新提出你的问题以避免混淆信息。
  • 感谢您指出不一致之处@fguillen。我试图简化这个问题。如果你仍然觉得我在这件事上完全错误,也请告诉我,我会回到绘图板上。

标签: javascript search backbone.js


【解决方案1】:

我看到您的 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
  • 您的模型的ids 在哪里?这对于 Backbone 来说非常重要。

【讨论】:

  • 感谢 fguillen 提供了一个好的骨架。我目前正在使用 JSON 响应,一旦我整理好它,我会用对我有用的东西更新这个空间。
猜你喜欢
  • 1970-01-01
  • 2013-10-14
  • 2014-06-25
  • 2012-05-04
  • 2012-02-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多