Ajax调用覆盖小部件工厂中的$(this)对象



小工具代码:

    (function($){
        $.widget("demo.widget", {
            _create: function() {
            },
            _init: function() {
            },
            load: function(){
                var widget = this;
                $.post(
                    Url, 
                    ajaxUtils.success(function(json) {
                    //variable widget is overwritten here if I create multiple instances of the widget
                    alert(widget.element.data("name"));
                    }), "json");
            },
            setOptions: function(name) {
                $(this).data("name", name);
            }
    })(jQuery);

我创建了同一个小部件的多个实例。

    $('<div/>').widget();
    $('<div/>').data('widget').setOptions("Name1");
    $('<div/>').data('widget').load();
    $('<div/>').widget();
    $('<div/>').data('widget').setOptions("Name2");
    $('<div/>').data('widget').load(); 

但是ajax成功调用中的小部件变量总是返回Name2。我应该如何编写代码来存储特定于实例的数据?

var widget = this上下文中的this是插件对象,而不是初始化插件的元素。

此:

alert(widget.data("name"));

应该是:

alert(widget.element.data("name"));

编辑:我不知道ajaxUtils对象及其成功方法发生了什么,它是否返回了一个在$.post成功时被调用的函数?

最新更新