我想定义SearchApp的模型和el属性(扩展Backbone.view),以便在3个不同的ElasticSearch索引中进行搜索。但是,我希望每个结果都显示在单独的div中,每个模型都有一个不同的div。我现在拥有的是:
var searchApp = new SearchApp({model: [searchModel1, searchModel2, searchModel3], el: $("#results1")});
但我理想的是
var searchApp = new SearchApp({model: [searchModel1, searchModel2, searchModel3], el: [$("#results1"),$("#results2"),$("#results3")]});
以便searchModel1返回的数据显示在div results1中,searchModel2返回的数据显示在div results2中,searchModel3返回的数据显示在div results3中。但是,这对我不起作用,我无法用列表定义el。有没有解决方法,或者甚至可能吗?非常感谢!
答案 0 :(得分:1)
开箱即用它不会起作用而且是错误的,但这是一种解决方法,也是更正确的方法。
而不是使用model:使用collection:并将其包装到新的Backbone.Collection
中跳过使用默认el并将其作为结果占位符传递,然后在渲染时使用它
var searchApp = new SearchApp({collection: new Backbone.Collection([searchModel1, searchModel2, searchModel3]), placeholders: [$("#results1"),$("#results2"),$("#results3")]});
SearchApp = Bb.View.extends({
initialize: function (options) {
this.placeholders = options.placeholders
}
render: function() {
//for each this.placeholders render searchModel (event better wrap it in new view)
}
});
但是这样你的searchApp实际上不是一个视图,而是某个实例的管理者。
我建议每个视图都应该有自己的模型,我的猜测是你已经知道有多少搜索模型及其视图对象。因此,只需创建一个接受模型和$的方法,然后创建一个视图。
function(model, $el) {
return new SearchApp({model: model, $el: $el});
}
然后在该视图中,当您收到搜索响应并相应地进行渲染时,请听。