2012-08-14 118 views
1

最近我一直在Backbone尝试我的手,并且有一个非常基本的问题。Backbone搜索多个模型

我需要寻找不同类型的记录和搜索API返回类似

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

JSON响应我有富,酒吧和巴兹骨干模型。取回时的集合应打到我的服务器并将搜索结果提供给我。我试图像

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

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

不过,我不知道如何解析服务器返回的结果让我收集持有车型富,酒吧和巴兹?还是应该调整服务器返回的结果,以便更容易地通过Backbone处理这个结果?

+1

我认为你只是走向这种架构的地狱投注方式......另一方面,我看到很多不匹配在你的示例代码中,例如你的'function'没有返回事情..我不认为任何人会发送'attrs'和'选项'到你的'Collection.model()'...并且即使你收到你的JSON请求作为'attrs'参数这个'attrs ['foo']'与您的JSON示例中的任何内容不匹配。总结:我想你应该重建你的问题,以避免混淆信息。 – fguillen 2012-08-14 15:11:32

+0

感谢您指出@fguillen的不一致之处。我试图简化这个问题。 如果你仍然觉得我完全错误的方式,请让我知道,所以我会回到绘图板。 – membLoper 2012-08-14 17:18:40

回答

0

正如我看到你的JSON不返回3个不同的模型,但3个不同的集合,因为其中3个包含数组。

我想你应该从一开始就WEEL要返回一堆不同类型的模型,假设开始,如果我的理解:

[ 
    { 
    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 
}); 

从在这里,我们可以做到这一点简单的,如果没有它的实际需要不产生结果的子类:

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非常重要。
+0

谢谢fguillen提供了一个好的骨架。我目前正在玩JSON响应,并会在我对它进行分类时用我的作品更新这个空间。 – membLoper 2012-08-15 15:27:02