Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 主干模型保存阻塞UI_Javascript_Jquery_Backbone.js - Fatal编程技术网

Javascript 主干模型保存阻塞UI

Javascript 主干模型保存阻塞UI,javascript,jquery,backbone.js,Javascript,Jquery,Backbone.js,我要做的是在保存主干模型之前显示一条“保存”消息(使用jQuery的slideDown()),并在从服务器收到响应后隐藏它(jQuery slideUp())。然而,出于某种原因,即使调试一切似乎都正常工作,jquery slideDown直到从服务器收到响应后才会触发。这是我的密码: saveSystemConfiguration: function (result) { /// <summary> /// Saves the system c

我要做的是在保存主干模型之前显示一条“保存”消息(使用jQuery的slideDown()),并在从服务器收到响应后隐藏它(jQuery slideUp())。然而,出于某种原因,即使调试一切似乎都正常工作,jquery slideDown直到从服务器收到响应后才会触发。这是我的密码:

   saveSystemConfiguration: function (result) {
        /// <summary>
        /// Saves the system configuration. 
        /// </summary>
        /// <returns type="Object">The promise.</returns>

        var self = this;
        Global.eventAggregator.trigger('loading:start', $('#savingPopupMsg').text());

        var promise = this.model.save({}, {
            success: function (model) {
                model.set('isNew', false);
                self.dirty = false;
                result.success = true;
                Global.eventAggregator.trigger('loading:end', $('#savingPopupMsg').text());
                self.isSaving = false;
            },
            error: function (model, error) {
                self.isSaving = false;
                result.success = false;
                Global.eventAggregator.trigger('loading:end', $('#savingPopupMsg').text());
                self.displayError();
            },
            async: false
        });

        return promise;
    }
saveSystemConfiguration:函数(结果){
/// 
///保存系统配置。
/// 
///承诺。
var self=这个;
Global.eventAggregator.trigger('loading:start',$('savingPopupMsg').text();
var promise=this.model.save({}{
成功:功能(模型){
model.set('isNew',false);
self.dirty=false;
result.success=true;
Global.eventAggregator.trigger('loading:end',$('savingPopupMsg').text();
self.isSaving=false;
},
错误:函数(模型,错误){
self.isSaving=false;
result.success=false;
Global.eventAggregator.trigger('loading:end',$('savingPopupMsg').text();
self.displayError();
},
异步:false
});
回报承诺;
}
loading:start和loading:end事件由loadingView处理,后者触发slideDown()和slideUp()

var loadingView=Backbone.View.extend({
el:$(“#加载PopupView”),
初始化:函数(){
/// 
///在事件聚合器上设置侦听器。
/// 
_.bindAll(这是“showView”、“hideView”);
Global.eventAggregator.on('load:start',this.showView);
Global.eventAggregator.on('load:end',this.hideView);
this.minDisplayTime=1000;
},
showView:功能(msg){
///显示加载视图。
///加载时要显示的消息。
这是$(“#加载原因”).text(msg);
这个.$el.slideDown('fast');
this.mindisplaytimereach=new$.Deferred();
var self=这个;
setTimeout(函数(){
self.mindisplaytimeated.resolve();
},这是minDisplayTime);
},
hideView:函数(){
///隐藏加载视图。
var self=这个;
如果(!this.mindisplaytimered){
返回;
}
this.mindisplaytimerarch.done(函数(){
self.$el.slideUp('fast');
});
}
});
返回加载视图;
});

非常感谢您的帮助。

主干网将其HTTP请求委托给jQuery,您将显式地传递给请求:

异步(默认值:true)
默认情况下,所有请求都是异步发送的(即,默认情况下设置为true)。如果你需要 同步请求,将此选项设置为false

删除非阻塞呼叫的此选项

    var loadingView = Backbone.View.extend({
    el: $('#loadingPopupView'),

    initialize: function () {
        /// <summary>
        /// Sets up listeners on the event aggregator.
        /// </summary>

        _.bindAll(this, 'showView', 'hideView');
        Global.eventAggregator.on('loading:start', this.showView);
        Global.eventAggregator.on('loading:end', this.hideView);
        this.minDisplayTime = 1000;
    },

    showView: function (msg) {
        /// <summary>Shows the loading view.</summary>
        /// <param name="msg" type="Object">The message to display while loading.</param>

        this.$('#loadingReason').text(msg);
        this.$el.slideDown('fast');

        this.minDisplayTimeReached = new $.Deferred();

        var self = this;
        setTimeout(function () {
            self.minDisplayTimeReached.resolve();
        }, this.minDisplayTime);
    },

    hideView: function () {
        /// <summary>Hides the loading view.</summary>

        var self = this;

        if (!this.minDisplayTimeReached) {
            return;
        }

        this.minDisplayTimeReached.done(function() {
            self.$el.slideUp('fast');
        });
    }
});

return loadingView;
});