Как передать наблюдаемое свойство (нокаута) для просмотра

У меня есть раскрывающийся список, связанный с ko.observableArray ([]). Здесь я фиксирую выбранное значение в vm.selectedUser, которое является ko.observable (). Я хочу присвоить это значение скрытому полю, отображаемому в событии onchange @ Html.HiddenFor (m => m.UserName, new {id = "hiddenUser"})

$ ("# hiddenUser"). val (vm.selectedUser);

Пожалуйста помоги. Спасибо


person monu    schedule 13.10.2013    source источник
comment
вы можете подписаться на изменения и сделать это   -  person Royi Mindel    schedule 13.10.2013


Ответы (3)


вы можете подписаться на изменения, чтобы сделать это

vm.selectedUser.subscribe(function(newValue) {
    $("#hiddenUser").val(newValue));
});

или просто привяжите скрытое поле к наблюдаемому, это тоже должно сработать

@Html.HiddenFor(m => m.UserName, new {id="hiddenUser",data_bind = "value: selectedUser" })
person Royi Mindel    schedule 13.10.2013

Вы можете сделать что-нибудь вроде этой ДЕМО (я создал свою скрипку в своем собственный стиль кодирования, может совпадать, а может и не совпадать с вашим, извиняюсь!)

Предполагая,

var Users = ko.observableArray([]);//Your User List
var SelectedUser=ko.observable();//Your Dropdown selected Item, can be ID or Name.

Вы можете написать / определить функцию для события изменения раскрывающегося списка: -

function selectionChanged(data){
console.log(SelectedUser());
    $('#hiddenUser').val(SelectedUser());//Displaying it in Textbox
            $('#hiddenUser2').val(SelectedUser());//Saving it in hidden field

};

Где моя разметка HTML будет следующей: -

<select data-bind="options: Users, optionsText: 'Name', optionsValue: 'Id',value: SelectedUser,event: { change: selectionChanged }"></select>

<input type="text" id="hiddenUser"></input>
<input type="hidden" id="hiddenUser2"></input>

Вы также можете ознакомиться с Пример скрипта от Р.П. Нимейера

person Shubh    schedule 13.10.2013

Нет необходимости в jQuery и подписке, просто привяжите скрытый ввод непосредственно к наблюдаемому selectedUser:

@Html.HiddenFor(m => m.UserName, new {id="hiddenUser", data_bind="value: selectedUser" })

Обратите внимание, что это «data_bind» вместо «data-bind». В Razor тире является недопустимым символом имени, но оно автоматически преобразует подчеркивание в тире.

[Это не значит, что это реклама, но это один из элементов, которые я демонстрирую в своем видео об использовании Knockout и MVC вместе на WintellectNOW dot com, если вам интересно.]

person Joel Cochran    schedule 14.10.2013