Backbone.js - 是否可以为模型定义多个el值?

时间:2014-11-20 11:23:39

标签: javascript jquery backbone.js elasticsearch backbone-views

我想定义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。有没有解决方法,或者甚至可能吗?非常感谢!

1 个答案:

答案 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});
}

然后在该视图中,当您收到搜索响应并相应地进行渲染时,请听。