创建jquery小部件时出现问题

时间:2012-03-24 12:58:12

标签: jquery jquery-ui

我传递一个JSON对象作为对我的自定义jquery小部件的引用,如下所示:

 var jsonData =  { "Name": "John ", "Country": "US" };

 $("#testdiv").TestWidget({MyData:jsonData});

在我的小部件中,我正在改变这样的数据:

$.widget("my.TestWidget", {

    options: {
        MyData: null
    },
    _create: function () {
    this.options.MyData.Name = "NewName";

    }
});

但是,更改并未反映在原始JSON数据中,因为显然jQuery在创建窗口小部件时正在创建我的JSON数据的副本!

这是非常不受欢迎的。有没有办法阻止复制数据,而是将对象作为参考传递?

以上是我们原始场景的简化版本。

由于

1 个答案:

答案 0 :(得分:0)

我担心这是不可能的。查看jQuery UI source code,您可以看到原因:

_createWidget: function( options, element ) {
    // $.widget.bridge stores the plugin instance, but we do it anyway
    // so that it's stored even before the _create function runs
    this.element = $( element ).data( this.widgetName, this );
    this.options = $.extend( true, {},
            this.options,
            $.metadata && $.metadata.get( element )[ this.widgetName ],
            options );

    var self = this;
    this.element.bind( "remove." + this.widgetName, function() {
            self.destroy();
    });

    this._create();
    this._init();
},

正在使用options方法复制$.extend

就个人而言,我没有看到您希望在此处传递jsonData作为参考的原因。在我看来,你的设计有问题。你能提供更多有关此事的信息吗?