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

时间:2012-08-01 18:52:44

标签: jquery jquery-plugins

小工具代码:

    (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成功调用中的widget变量总是返回Name2。我应该如何编写代码来存储特定于实例的数据?

1 个答案:

答案 0 :(得分:1)

this上下文中的

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

此:

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

应该是:

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

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