Изменить глубокие параметры в виджете jQuery UI

Каков наилучший способ изменить глубоко вложенную опцию в виджете jQuery после его создания?

$.widget("test.widget1", {
    options: {
        deepOption: {
            prop1: false,
            prop2: false
        }
    },
    _create: function() {

    },
    _init: function () {
        this.element.append('<br>' + this.options.deepOption.prop1 + " " + this.options.deepOption.prop2);
    }
})
$("#one").widget1();

$("#one").widget1({
    deepOption: {
        prop1: true
    }
});​

Приведенный выше код изменяет prop1 вариант к истине и ядерному оружию prop2, Как я могу изменить prop1 сохраняя prop2,

Вот jsFiddle для этого.

Изменить: я придумал решение, но это похоже на взлом. Это лучший способ сделать то, что я пытаюсь сделать?

$.widget("test.widget1", {
    options: {
        deepOption: {
            prop1: false,
            prop2: false
        }
    },
    _create: function() {

    },
    _init: function () {
        this.element.append('<br>' + this.options.deepOption.prop1 + " " + this.options.deepOption.prop2);
    },
    _setOption: function (key, value) {
        switch(key) {
            case 'deepOption':
                value = $.extend({}, this.options.deepOption, value);                
                break;            
        }

        $.Widget.prototype._setOption.apply(this, arguments);
    }
})
$("#one").widget1();

$("#one").widget1({
    deepOption: {
        prop1: true
    }
});​

Вот обновленный jsFiddle.

1 ответ

.option() как было расширено в jQuery UI 1.9 для поддержки установки частичных вложенных параметров, как описано в журнале изменений.

Чтобы изменить такую ​​опцию после создания виджета, теперь вы можете использовать:

$("#one").widget1('option', 'deepOption.prop1', true);

jsFiddle

Другие вопросы по тегам