使用backbone.js和marionette.js通过onclick刷新一个区域

时间:2014-08-11 09:01:30

标签: backbone.js marionette jquery-blockui

以下是刷新区域的onclick事件

'click div.tile-config ul.dropdown-menu li a.refresh': 'clickRefresh'

以下是我的区域刷新代码

clickRefresh: _.bind(function(e){
    $(this).parents('.tile');
    this.blockUI(e);
    window.setTimeout(function(){
        alert("unblockUI");
        this.unblockUI(e);
    }, 1000);
    e.preventDefault();
},this),

blockUI: function(event){
    $(event).block({
        message: '<img src="res/lib/custom/img/loading.gif" align="absmiddle">',
        css: {
            border: 'none',
            padding: '2px',
            backgroundColor: 'none'
        },
            overlayCSS: {
            backgroundColor: '#000',
            opacity: 0.05,
            cursor: 'wait'
        }
    });
},

unblockUI: function(event){
    $(event).unblock({
        onUnblock: function () {
            $(event).removeAttr("style");
        }
    });
}

当我点击刷新链接时,它不会刷新并获得&#34;类型错误:this.blockUI(e)不是函数。&#34;。 请帮帮我。

1 个答案:

答案 0 :(得分:1)

这可能是因为你不需要在主函数上放置绑定,而是在超时的回调上放置

试试这个

clickRefresh: function(e){
    $(this).parents('.tile');
    this.blockUI(e);

    window.setTimeout(_.bind(function(){
        alert("unblockUI");
        this.unblockUI(e);
    },this), 1000);

    e.preventDefault();
},

编辑:所以当前你试图将块放在不是DOM元素的事件上。如果您想将阻止程序放在刷新按钮上,请使用event.currentTarget,如此

    blockUI: function (event) {
        $(event.currentTarget ).block({
            message: '<img src="//cdnjs.cloudflare.com/ajax/libs/file-uploader/3.7.0/loading.gif" align="absmiddle">',
            css: {
                border: 'none',
                padding: '2px',
                backgroundColor: 'none'
            },
            overlayCSS: {
                backgroundColor: '#000',
                opacity: 0.05,
                cursor: 'wait'
            }
        });
    },

    unblockUI: function (event) {
        $(event.currentTarget).unblock({
            onUnblock: function () {
                $(event.currentTarget).removeAttr("style");
            }
        });
    }

小提琴http://jsfiddle.net/leighking2/xn0yz33n/

或者您可以使用this.$el将其放在整个视图上(这也意味着您不需要传递事件),如此

    blockUI: function () {
        $(this.$el).block({
            message: '<img src="//cdnjs.cloudflare.com/ajax/libs/file-uploader/3.7.0/loading.gif" align="absmiddle">',
            css: {
                border: 'none',
                padding: '2px',
                backgroundColor: 'none'
            },
            overlayCSS: {
                backgroundColor: '#000',
                opacity: 0.05,
                cursor: 'wait'
            }
        });
    },

    unblockUI: function () {
        $(this.$el).unblock({
            onUnblock: function () {
                $(this.$el).removeAttr("style");
            }
        });
    }

小提琴http://jsfiddle.net/leighking2/0osL8u6k/