2013-09-29 64 views
1

我想從頁面加載中的restful wcf服務獲取數據,並綁定到下拉不工作。Knockout ObserableArray下拉綁定問題

 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> 

問題是,knockout數組正在填充正確的加載函數,但下拉不刷新更新的數據。我不明白問題在哪裏。請給出投入。

回答

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:如果它適合您,您可以將答案標記爲已接受。謝謝。 –