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

Backbone.js - is it possible to define multiple el values for a model?

本文关键字:定义 el 模型 js 是否 主干      更新时间:2023-09-26

我想定义一个SearchApp(扩展Backbone.view)的模型和el属性,以便在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")]});
这样,搜索模型 1 返回的数据显示在div 结果 1 中,搜索模型 2 返回的数据显示在div 结果

2 中,搜索模型 3 返回的数据显示在div 结果 3 中。但是,这对我不起作用,我无法用列表定义 el。是否有任何解决方法,或者这甚至可能吗?非常感谢!

开箱即用,它不起作用并且是错误的,但是解决方法和更正确的方法是这样做的。

不使用模型:使用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)
}
});

但是,通过这种方式,您的搜索应用程序实际上不是视图,而是某个实例的管理器。

我建议每个视图都应该有自己的模型,我的猜测是你已经知道有多少个搜索模型及其视图对象。因此,只需创建一个接受您的模型和 $ 并创建视图的方法。

function(model, $el) {
return new SearchApp({model: model, $el: $el});
}

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