Javascript 如何从一个视图中刷新另一个视图的ui,这两个视图都存在于主干中的不同选项卡中?
我是Javascript 如何从一个视图中刷新另一个视图的ui,这两个视图都存在于主干中的不同选项卡中?,javascript,jquery,backbone.js,tabs,Javascript,Jquery,Backbone.js,Tabs,我是backbone新手,在我当前的项目中,我们使用backbone和Requirejs。 共有4个选项卡,分别为A、B、C、D。在tabA中,我将一些数据保存在db中,在tabD中,应该显示从tabA保存的数据。因此,在tabA中的保存操作完成后,我调用tabD的渲染方法 第一次加载屏幕时,所有选项卡都会正确加载正确的数据。 但当我从tabA保存数据并调用tabD的render方法时,它不会更新ui。问题是,render()被调用时没有出现错误,但tabD中的ui没有得到刷新 以下是选项卡A的
backbone
新手,在我当前的项目中,我们使用backbone
和Requirejs
。
共有4个选项卡,分别为A、B、C、D。在tabA中,我将一些数据保存在db中,在tabD中,应该显示从tabA保存的数据。因此,在tabA中的保存操作完成后,我调用tabD的渲染方法
第一次加载屏幕时,所有选项卡都会正确加载正确的数据。
但当我从tabA保存数据并调用tabD的render方法时,它不会更新ui。问题是,render()
被调用时没有出现错误,但tabD中的ui没有得到刷新
以下是选项卡A的虚拟代码:
define(['jquery','backbone','underscore','views_jira/tabDView'],
function($,Backbone,_,TabDView)
{
var TabAView = Backbone.View.extend({
tabDView:new TabDView(),
render:function(){
this.model.save(objectToSave,{
success: _.bind( this.saveSuccessCallback, this ),
error: _.bind( this.saveErrorCallback, this )
});
}
});
saveSuccessCallback: function ( model, response ) {
tabDView.render()
},
saveErrorCallback:function ( model, response ) {
}
}
);
以下是选项卡D的代码:
define(['jquery','backbone','underscore','collections'],
function($,Backbone,_,DataCollection) {
var TabDView = Backbone.View.extend({
el:'#myViewDivinHtmlBody'
dataCollection:new DataCollection();
render:function(){
this.dataCollection.fetch({
success: _.bind(this.handleOpendTicketsSuccessCallback, this),
error: _.bind(this.handleOpendTicketsErrorCallback, this)
});
},
handleOpendTicketsSuccessCallback:function(model, response, fetchOptions){
this.$el.find('.mydiv').append(response);
},
handleOpendTicketsErrorCallback:function(model, response, fetchOptions){
console.log("Error in fetching the tickets");
}
});
return TabDView;
}
)
谁能告诉我哪里出了问题。
注意:没有控制台错误。您的主干视图需要被告知要附加到DOM的哪个元素。如果您没有以某种方式指定,那么
el
和$el
将被分配给分离的
标记,而不是在DOM中。因此,对其进行渲染时不会出现错误,但不可见
您的视图是否有成功的初始渲染?如果是这样的话,您必须将它们附加到一些代码中的DOM元素,而这些代码没有包含在您的草图中。例如:
var tabAView = new TabAView({el: '#tabA'});
或者可能
tabAView.setElement('#tabA');
为视图创建的所有实例预设它的一种方法是:
var TabAView = Backbone.View.extend({
el: '#tabA',
// etc
});
无论视图是在创建时还是以后被赋予一个元素,DOM元素都应该首先存在。如果选择器显示为空,el
将再次默认为分离的
要点是,当您在
TabAView
定义中创建对新TabDView
实例的引用时,请确保在重新提交之前将其引用设置为附加的DOM元素。我会在您的选项卡视图中建议以下内容:
saveSuccessCallback: function ( model, response ) {
tabDView.setElement('#tabD');
tabDView.render()
},
我没有看到任何代码将TabDView
元素添加到DOMYes中,实际上我没有在我的伪代码中为TabDView分配el。现在我已经编辑了这个问题。事实上,您对tabDView.setElement(“#tabD”)的解决方案已经奏效了。很好,很高兴听到这个问题。我已经学会了如何使用主干网,当事情似乎不起作用,但没有控制台错误时,原因通常是一个视图的el
并不是指您认为它是什么。是的。在我们所学到的东西上帮助人们很好。它给人快乐。塔克斯