Backbone.js 的 Ajax 在 Chrome 和 Firefox 中调用不同的行为

Backbone.js's Ajax call different behavior in Chrome and Firefox

我在 Firefox 中遇到了一个奇怪的问题。我们正在加载一个页面,同时调用 Routers.initializeRouters();发送 ajax 请求以获取数据,并且 loadFormSuccessHandler 函数将响应填充到视图中。

在 Chrome 的情况下,Ajax 请求等待视图初始化,然后使用 ajax 响应将数据填充到视图中。

对于 Firefox,Ajax 请求获取数据并开始填充视图,但它失败了,因为一些视图仍未初始化。

如何通知 ajax 请求在填充数据之前等待视图初始化。

任何指点都会有所帮助。

Main.js

var Main = {

    treeView : null,
    formView : null,
    mainTabBarView : null,
    currentFieldView : null,
    designModeViewPointer : null,
    carousel : null,
    advancedControlsView : null,

    renderUI : function() {
        Templates.loadTemplateList();
        Utility.initializeFieldHandlerMap();
        Views.showBody();
        Routers.initializeRouters();
        var form = new Models.Form();
        this.formView = Views.showForm('formDetailsDiv', form);
        this.treeView = new Views.TreeView({
            el : $('#controlsTreeDiv'),
            model : null
        });

        this.treeView.getTree().attachEvent("onDblClick",
                ControlBizLogic.formTreeNodeClickHandler);

        Main.mainTabBarView = new Views.TabBarView({
            el : $('#csdOperationsContainer'),
            model : null
        });
        Views.showControlTab('control');
        this.carousel = $('#controlTypesSlider');
        this.carousel.tinycarousel();
        Main.advancedControlsView = new Views.AdvancedPropertiesTabView({
            el : $('#advancedControlProperties'),
            model : null
        });
        // init design mode
        Main.designModeViewPointer = new Views.DesignMode({
            el : $("#design")
        });
        Routers.designModeOnBeforeDragEvent();
        Routers.designModeOnDragEvent();

    }
}

Main.renderUI();

方法用ajax调用响应

loadForm : function(_id, edit) {
                    $("#formWaitingImage").show();
                    if (Main.formView == null) {
                        Main.formView = Views.showForm('formTab',
                                new Models.Form({
                                    "id" : _id
                                }));

                    }
                    Main.formView.getFormModel().set({
                        id : _id
                    });
                    GlobalMemory.editForm = (edit == "true");
                    Main.formView.getFormModel().fetch({
                        url : 'csdApi/form/' + _id + "/" + edit,
                        success : this.loadFormSuccessHandler
                    });
                    // save as
                },

loadFormSuccessHandler : function(model, response) {
                    var formId = model.get('id');
                    if (formId != undefined && formId != null) {
                        GlobalMemory.editForm = true;
                    }
                    Routers.formEventsRouterPointer.updateUI(model);
                    Routers.formEventsRouterPointer.loadFormulae(Main.formView
                            .getFormModel(), "", "");

                    AdvancedControlPropertiesBizLogic
                            .loadSkipRules(Main.formView.getFormModel());
                    Main.formView.getFormModel().set({
                        skipRules : model.get('skipRules'),
                        id : model.get('id')
                    });
                    Main.advancedControlsView.setTableCss('formulaTable');
                    // Main.mainTabBarView.loadFormSummary();
                    Main.mainTabBarView.getFormSummaryView().displayFormInfo(
                            model.getFormInformation());

                    $("#formWaitingImage").hide();
                    // save form

                    if (!GlobalMemory.editForm) {

                        $('#saveForm').prop("value", " Save As ")
                    }
                },

此问题与特定的 firefox 版本有关,已在下一个 firefox 版本中修复。