0

我有一个新的 jquery UI 小部件工厂小部件,在 create 方法中我想加载一个 js 文件,然后用它做一些事情。但是,当我调用 $.getScript 并在回调中引用“this”时,“this”不再是我的插件实例,它现在与加载的脚本有关!我怎样才能访问插件实例呢?

代码:

$.widget("custom.embed", {
    options:{
        base_url: "",
        theme_url: "",
        widget_base_url: "",
        token: ""
    },
    _create: function () {
        $.getScript("URL", function(){
            this.doSomething();
        });
    },
    doSomething: function(){
        alert("something");
    }
});

谢谢!

编辑

$.widget("custom.embed", {
        options:{
            base_url: "",
            theme_url: "",
            widget_base_url: "",
            token: ""
        },
        _create: function () {
            var widget = this;
            $.getScript("URL", function(){
                widget.doSomething();
            });
        },
        doSomething: function(){
            alert("something");
        }
    });

这是一种安全的方法吗?它似乎工作。

4

2 回答 2

2

您的问题与闭包有关(变量范围取决于函数定义)。我会做类似的事情:

_create: function() {
    var self = this;
    $.getScript("URL", function() {
        self.doSomething();
    });

阅读这篇文章

于 2014-10-29T19:20:43.253 回答
0

关于什么:

var widget = $.widget(
    ...
    _create: function() {
        $.getScript("URL", function() {
            widget.doSomething();
        });
    },
    doSomething: function() {
        alert("something");
    }
});
于 2014-10-29T19:15:40.987 回答