Обновить поле с помощью jquery, не обновлять наблюдаемый

Я хочу сказать привет сообществу stackru.

Я только начал использовать нокаут несколько дней назад.

Хорошо, я использую его для создания динамического меню для CMS, над которой я работаю.

Вот код: http://jsfiddle.net/dnlgmzddr/HcRqn/

Проблема в том, что когда я выбираю элемент из поля выбора, поле ввода обновляется, как я ожидаю, но наблюдаемое не отражает изменения. Из-за этого кнопка добавления не активна.

Что мне не хватает? Как я могу это исправить?

Спасибо.

2 ответа

Решение

Когда вы заполняете поле url, вам нужно будет вызвать событие change, чтобы получить наблюдаемое для обновления. Итак, вы можете сделать:

$("#url").val('/pages/' + id).change(); 

Другой вариант, который больше соответствует духу нокаута, - использовать привязку для вашего выбора. В этом случае вы, вероятно, захотите заполнить наблюдаемое этим значением, а затем использовать ручную подписку, чтобы по умолчанию отформатировать значение в поле ввода.

this.itemUrl = ko.observable();
this.selectedUrl = ko.observable();
this.selectedUrl.subscribe(function(newValue) {
    if (newValue) {
        this.itemUrl("/pages/" + newValue);                
    }
}, this);

Затем свяжите свой выбор с selectedUrl:

    <select id="pagedList" data-bind="value: selectedUrl">
        <option value=""><option>
        <option value="test">Test</option>
    </select>

Вот пример: http://jsfiddle.net/rniemeyer/HcRqn/21/

Вы также можете отменить дополнительную заметную и ручную подписку, если "значением" ваших опций была ссылка.

Я не вижу нигде в вашем коде, где вы фактически активируете кнопку, когда выбрано поле. Так что я могу что-то упустить, но просто включите кнопку изменения. Как следующее:

function LoadMenu() {
    $("#pagedList").change(function () {
        var id = $(this).val();
        $("#url").val('/pages/' + id);
        // remove the disabled attribute here
        $('button.space').removeAttr('disabled');
    });
}
Другие вопросы по тегам