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
并不是指您认为它是什么。是的。在我们所学到的东西上帮助人们很好。它给人快乐。塔克斯