重新加载自我调用功能

时间:2016-03-17 05:46:40

标签: javascript jquery laravel datatables

我有一个自我调用匿名函数,我在GitHub上创建链接在Laravel中使用Restful,并添加了一些Sweet Alerts糖。

(function(window, $, undefined) {

    var Laravel = {
        initialize: function() {
            this.methodLinks = $('a[data-method]');
            this.token = $('a[data-token]');
            this.registerEvents();
        },

        registerEvents: function() {
            this.methodLinks.on('click', this.handleMethod);
        },

        handleMethod: function(e) {
            e.preventDefault()

            var link = $(this)
            var httpMethod = link.data('method').toUpperCase()
            var form

            // If the data-method attribute is not PUT or DELETE,
            // or PATCH then we don't know what to do. Just ignore.
            if ($.inArray(httpMethod, ['PUT', 'DELETE', 'PATCH']) === -1) {
                return false
            }

            Laravel
                .verifyConfirm(link)
                .done(function () {
                    form = Laravel.createForm(link)
                    form.submit()
                })
        },

        verifyConfirm: function(link) {
            var confirm = new $.Deferred()

            swal({
                title: "Are you sure?",
                text: link.data('confirm'),
                type: "warning",
                showCancelButton: true,
                confirmButtonColor: "#DD6B55",
                confirmButtonText: "Yes, delete it!",
                closeOnConfirm: false
                },
                function(result) {
                    if (result) {
                        confirm.resolve(link);
                    } else {
                        confirm.reject(link);
                    }
                }
            );

            return confirm.promise()
        },

        createForm: function(link) {
            var form =
                $('<form>', {
                    'method': 'POST',
                    'action': link.attr('href')
                });

            var token =
                $('<input>', {
                    'type': 'hidden',
                    'name': '_token',
                    'value': link.data('token')
                });

            var hiddenInput =
                $('<input>', {
                    'name': '_method',
                    'type': 'hidden',
                    'value': link.data('method')
                });

            return form.append(token, hiddenInput)
                .appendTo('body');
        }
    };

    Laravel.initialize();

})(window, jQuery);

当表是常规表时,它很有用,但我有几个dataTables表,可以将一些操作链接加载到javascript中的列中。

当发生这种情况时,我无法访问此功能,因为我认为它超出了范围,或者它已经被加载。

我正在使用:

initComplete: function(settings, json) {
    //???? Laravel.initialize();
}

DataTable中的回调,但是我仍然无法访问任何内容。

有没有办法从匿名函数中导出对象文字,以便我可以重新初始化它?

或者我怎么可能这样做?

1 个答案:

答案 0 :(得分:2)

您可以将其用作property的{​​{1}},即全局变量,而不是将其定义为局部变量。

  

window您可以随心所欲地调用window.Laravel = {...