2013-09-29 5 views
1

Я пытаюсь извлечь данные из службы обслуживания wcf, находящейся в состоянии покоя, при загрузке страницы и привязки к выпадающему списку, который не работает.Knockout ObserableArray dropdown binding issue

 function CreateItem(name, value) { 
      var self = this; 

      self.itemName = ko.observable(name); 
      self.itemValue = ko.observable(value); 
     }; 

     function AppViewModel() { 
      var self = this; 

      self.titleList = ko.observableArray(); 

      self.load = function() { 
       alert("click fired"); 
       $.ajax({ 
        url: "https://mydomain/RestfulService/Service1.svc/CreateData?name=venkat", 
        type: "POST", 
        cahce: false, 
        async: false, 
        data:'', 
        dataType: "jsonp", 
        success: function (data) { 
         for (var i = 0; i < data.length; i++) { 
          self.titleList().push(new CreateItem(data[i].Description, data[i].TitleID)); 
         } 
         alert("success " + data); 
        }, 
        error: function (error) { 
         alert("failed " + error); 
        } 
       }); 

      }; 

     }; 


    <div> 
     <select data-bind="options: titleList(), optionsText: 'itemName', optionsValue: 'itemValue', value: selectedTitleValue, optionsCaption: 'Please choose'"></select> 
    </div> 

<script type="text/javascript"> 

    $(document).ready(function() { 
     var model = new AppViewModel(); 
     model.load(); 

     ko.applyBindings(model); 
    }); 
</script> 

Проблема в том, Нокаут массив заполнения в функции нагрузки правильно, но падение вниз не освежает обновленные данные. Я не понимаю, где проблема. Просьба дать материалы.

ответ

2

Заменить:

self.titleList().push(new CreateItem(data[i].Description, data[i].TitleID)); 

с

self.titleList.push(new CreateItem(data[i].Description, data[i].TitleID)); 

Причина в том, self.titleList() возвращает основной массив, когда вы нажимаете на него данные, Нокаут не знает об изменениях и не уведомлять мнения.

+0

Проверено. http://jsfiddle.net/zy2mD/ Устранение разыменования 'ko' устранит вашу проблему. – Origineil

+0

Спасибо большое за ваш быстрый ответ. Он работает сейчас. – user1837788

+0

@ user1837788: вы можете отметить ответ как принятый, если он работает для вас. Благодарю. –