2015-12-03 3 views
0

Я новичок в Нокауте. У меня есть 2 выпадающего списка. Первый - это имена состояний, которые заполнены в HTML. Второй для городов, которые будут заполнены методом в Knockout.js, которые имеют вызов ajax для заполнения списка городов в зависимости от выбранного состояния. Этот метод будет вызван изменением раскрывающегося списка состояний.Как вызвать метод нокаута с параметром в меню выбора?

Я знаю, что мы можем вызвать метод изменения таким образом:

<select id="state" name="state" data-bind="event: {change: getCities}"> 

Однако, я хочу передать выбранное значение состояния к методу getCities. Как я могу это сделать?

Я пробовал:

<select id="state" name="state" data-bind="event: {change: getCities(this.value)}"> 

, но он не работает. Он просто загрязняет города выбранного меню по умолчанию. "this.value" выслан как undefined. Как передать новое выбранное значение состояния методу?

+1

хорошо вы должны иметь 'value' обязательными для выбора элемента, как' значение: selectedState'. то после изменения вы можете передать 'getCities (selectedState)'. но передача inLine через 'event' не очень подходит, попробуйте подписаться на' value' binded observable и получить доступ к выделеннойValue. –

ответ

3

Вы можете прикрепить наблюдаемый элемент, который будет удерживать текущий selectedValue, а затем subscribe для изменения этого наблюдаемого. Что-то вроде этого

function vm(){ 
    var self = this; 
    self.state = ko.observable() 

    self.getCities = function(stateVal){ 
    console.log("getCities called with ",stateVal) 
    } 

    self.state.subscribe(function(stateVal){ 
    self.getCities(stateVal) 
    }) 

} 
ko.applyBindings(new vm()) 

с HTML

<select id="state" name="state" data-bind="value: state"> 
<option value="1">state 1</option> 
<option value="2">state 2</option> 
<option value="3">state 3</option> 
</select> 

http://jsfiddle.net/newuserjs/dmq52ycu/

+0

Спасибо. Теперь он отлично работает. Это так просто. –

Смежные вопросы