Backbone.js 在视图的多个实例上调用渲染的最佳方法是什么?
我正在尝试对视图的多个实例调用render。然而,它们需要按顺序发生(不是真的)。这是我的视图代码,希望能解释它自己Backbone.js 在视图的多个实例上调用渲染的最佳方法是什么?,backbone.js,Backbone.js,我正在尝试对视图的多个实例调用render。然而,它们需要按顺序发生(不是真的)。这是我的视图代码,希望能解释它自己 var SiteView = Backbone.View.extend({ el: '#contentArea', render: function(siteId) { console.log("SiteView.render running",arguments); var that = this; var sit
var SiteView = Backbone.View.extend({
el: '#contentArea',
render: function(siteId) {
console.log("SiteView.render running",arguments);
var that = this;
var siteCollection = new SiteCollection();
this.collection = siteCollection;
this.collection.fetch({
data: {
returnType: "VERTEX",
startId: siteId,
},
success: function(model, response, options) {
console.log("SiteView.render.success",arguments);
var templateHtml = _.template(siteHtml, response);
that.$el.empty();
that.$el.html(templateHtml);
that.renderServersList(response.ID);
that.renderContainersList(response.ID);
}
});
},
renderServersList: function(siteId) {
console.log("SiteView.getServersList running", arguments);
var that = this; // Removed this line which seemed to be causing the issue :-/
// This is a view in a separate file provided by require.js
var serverListView = new VertexListView({el: "#siteServersListBody"});
serverListView.render("SERVERS", siteId);
},
renderContainersList: function(siteId) {
console.log("SiteView.getContainersList running", arguments);
// This is a view in a separate file provided by require.js
var contListView = new VertexListView({el: "#siteContainersListBody"});
contListView.render("CONTAINERS", siteId);
}
});
GetContainerList和getServersList都在工作,因为它正在获取正确的数据。但是,在呈现服务器列表时,它还包含整个容器列表,然后容器列表只包含它应该包含的内容
我之所以将这些请求分离出来,而不是在原始请求中包含容器和服务器,主要是因为容器的大小。它可能相当大。如果您在没有特定于域的应用程序代码的情况下演示此问题,则回答起来会更容易。视图的多个实例在哪里?这个问题的标题给出了一个简单的答案(遍历视图数组;JS中的数组总是有固定的顺序),但是如果您已经有一段时间没有开始研究代码块,那么代码块不是最好的选择,就像你可能已经考虑过的。考虑管理我的第一个评论的原因,为什么当你有两个叫做“get”的函数不返回任何东西时,强迫人们尝试理解你的代码。这只是习惯,我的伙伴们也抱怨这一点。这些方法可能应该称为render。。。我将编辑代码,使其可读性更好一些。多个实例实际上是每个renderServersList和RenderContainerList函数的本地实例。我在每个视图中创建一个新的VertexListView。然而,当服务器列表被呈现时,它也包含我真的不理解的容器,因为它们是独立的对象。。。在再次进行此操作时,我注意到renderServersList中的“var that=this;”行。我在想,为什么会这样?所以我移除了它,现在它可以正常工作了。现在我完全不明白为什么会有不同。别误会我的意思,很高兴它能起作用,但那为什么会导致它不起作用呢?好的,伙计们,谢谢你们的回复。当然,我欢迎一个更好的方式,如果我在这方面完全错误,因为我是一个骨干新手:)。