Проблема при создании виджета jquery - PullRequest
2 голосов
/ 24 марта 2012

Я передаю объект 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 голосов
/ 26 марта 2012

Боюсь, это невозможно.Глядя на исходный код jQuery UI , вы можете понять, почему:

_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 в качестве ссылки здесь.Мне кажется, что-то не так с вашим дизайном.Не могли бы вы предоставить больше информации по этому вопросу?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...