gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 11:22:41 25 4
gpt4 key购买 nike

我想定义 SearchApp(扩展 Backbone.view)的 model 和 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")]});

这样searchModel1返回的数据显示在div results1内部,searchModel2返回的数据显示在div results2内部,searchModel3返回的数据显示在div results3内部。但是,这对我不起作用,我无法用列表定义 el 。有没有解决这个问题的方法,或者这是否可能?非常感谢!

最佳答案

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

不使用模型:使用集合:并将其包装到新的 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 实际上就不再是一个 View ,而是某个实例的管理器。

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

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

然后在该 View 中监听您收到的搜索响应并进行相应的渲染。

关于javascript - Backbone.js - 是否可以为模型定义多个 el 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27038366/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com