我传递一个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数据的副本!
这是非常不受欢迎的。有没有办法阻止复制数据,而是将对象作为参考传递?
以上是我们原始场景的简化版本。
由于
答案 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
作为参考的原因。在我看来,你的设计有问题。你能提供更多有关此事的信息吗?