2017-01-16 7 views
2

Я новичок в knockoutjs и создании проекта. В этом случае я обновляю форму, в которой вы выбираете состояние, из которого stateId будет извлекать список городов, cityId извлекает zipcodes и так далее. Для начального массива у меня есть предварительная выборка перед вызовом модели, но при обновлении состояния все города должны быть пустыми и перезаправлены в соответствии с выбранным идентификатором состояния и т. Д. My SelectedCityAction не обновляется при выборе состояния. Может ли кто-нибудь помочь мне?Knockoutjs-Создание зависимого выпадающего списка при обновлении записи Zend

EditUserAddressModel = function(statesJson, citiesJson , zipcodeJson, Addressdata) { 

     var self = this; 
     self.selectedStateAction = ko.observable(Addressdata.state_id); 
     self.selectedCityAction = ko.observable(Addressdata.city_id); 
     self.selectedZipAction= ko.observable(Addressdata.zipcode_id); 
     self.statesArray = ko.observableArray($.parseJSON(statesJson)); 
     self.citiesArray = ko.observableArray($.parseJSON(citiesJson)); 
     self.zipcodeArray = ko.observableArray($.parseJSON(zipcodeJson)); 

     self.selectedStateAction.subscribe(function(newStateValue) { 

      self.state_id = newStateValue; 
      self.selectedCityAction = undefined; 
      self.citiesArray = ko.observableArray(); 

      $.ajax({ 
       url: '/profile/getcities?mode=edit&state_id='+self.state_id, 
       type: 'get', 
       dataType: 'html', 
       data: {}, 
       success: function(data) { 
        self.citiesArray = ko.observableArray($.parseJSON(data)); 
       } 
      }) 
     }); 
} 

var edit_address_form = document.getElementById("edit-address-form"); 
     ko.applyBindings(new EditUserAddressModel(resp1[0], resp2[0], resp3[0], Addressdata), edit_address_form); 

TPL Код:

<select class="form-control custom-form-control" data_from="edit_city" data-bind="options: $root.statesArray, optionsText: 'state_name', optionsValue: 'state_id', value: selectedStateAction, optionsCaption: 'Select State'"></select> 
    <select class="form-control custom-form-control" data_from="edit_zip" id="edit_city" data-bind="options: citiesArray, optionsText: 'city_name', optionsValue: 'city_id', value: selectedCityAction, optionsCaption: 'Select City'"></select> 
    <select class="form-control custom-form-control select_zip" id="edit_zip" data-bind="options: $root.zipcodeArray, optionsText: 'zip', optionsValue: 'zipcode_id', value: selectedZipAction, optionsCaption: 'Select Zip'"></select> 

ответ

0

В этой строке:

self.citiesArray = ko.observableArray($.parseJSON(data)); 

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

Вы должны установить observableArray, называя его новым значением:

self.citiesArray($.parseJSON(data)); 

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

  • Нет связанных вопросов^_^