Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/68.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 jQuery小部件和内部回调_Javascript_Jquery - Fatal编程技术网

Javascript jQuery小部件和内部回调

Javascript jQuery小部件和内部回调,javascript,jquery,Javascript,Jquery,这不起作用,但给了您一个想法:小部件需要使用自己的方法作为回调: $.widget("me.mywidget", { _create: function() { this.call("mymodule", "myaction", {arg: this.options.value}, _parseData); }, _parseData: function(data) { console.log(data); }, ca

这不起作用,但给了您一个想法:小部件需要使用自己的方法作为回调:

$.widget("me.mywidget", {

    _create: function() {
        this.call("mymodule", "myaction", {arg: this.options.value}, _parseData);
    },

    _parseData: function(data) {
        console.log(data);
    },

    call: function(module, action, params, callback) {
        var params = params || {};
        var url = "/" + module + "/"  + action;

        $.post(url, params, function(data) {
            if (data.payload) callback(data.payload);
        });
    },
});
它当前引发异常:
uncaughtreferenceerror:\u未定义parseData


执行此操作的标准方法是什么?

美元后回调需要使用
.apply
.call
调用您自己的
回调
,这两种方法都允许您在调用的函数中设置
的范围

call: function(module, action, params, callback) {
    var params = params || {};
    var url = "/" + module + "/"  + action;
    var self = this;

    $.post(url, params, function(data) {
        if (data.payload) callback.apply(self, [ data.payload ]);
    });
},
或:


你可以。

天哪,那太容易了。我甚至没有想过,在回调中使用这个和“this”是窗口,而不是widget对象,这是不可取的
call: function(module, action, params, callback) {
    var params = params || {};
    var url = "/" + module + "/"  + action;

    $.post(url, params, function(data) {
        if (data.payload) callbac.call(self, data.payload);
    });
},