2012-01-18 93 views
0

我寫了一個簡單的應用程序從服務器 C#代碼 公共JsonResult閱讀(){ VAR 產品= db.Products得到JSON數據; return Json(GetProducts(),JsonRequestBehavior.AllowGet); }knockoutJS JSON沒有轉換爲可觀察

public IEnumerable<Product> GetProducts() 
    { 
     var data = db.Products.ToList(); 
     return (data); 
    } 

在視圖我寫了下面結合圖模型數據。

<div> 
<table data-bind="with: products"> 
    <thead><tr><th>From</th><th>To</th><th>Subject</th></tr></thead> 
    <tbody data-bind="foreach: Object"> 
     <tr> 
      <td data-bind="text: id"></td> 
      <td data-bind="text: name"></td> 
      <td data-bind="text: description"></td> 
     </tr>  
    </tbody> 
</table> 
</div> 
<script type="text/javascript"> 
    function ProductsViewModel() { 
     var self = this; 
     self.products = ko.observable(); 
     $.getJSON("http://localhost:50998/Home/Read", function (data) { 
      self.products = JSON.parse(data); 
     }); 

} 
    ko.applyBindings(new ProductsViewModel()); 
</script> 

從動作JSON數據返回是如下

[{"ID":1,"Name":"Roger","Description":"Test1"},{"ID":2,"Name":"Roger2","Description":"Test2"}] 

i之後具有解析JSON,我不能使用所解析的對象來更新observerable。

有誰知道爲什麼會發生這種情況?

回答

1

如果要將self.products(或任何其他可觀察值的值)設置爲JSON.parse的結果,則需要將其稱爲self.products(JSON.parse(data))。 Observable就像功能,所以你需要把它們當作函數來處理;-)

+0

感謝您的幫助,但是,即使我將代碼更改爲$ .getJSON(「http:// localhost:50998/Home/Read「,函數(data){self.products(JSON.parse(data)); });它仍然無法工作,是否有任何其他問題與我的代碼。 – Roger 2012-01-18 20:19:27

+1

所以你想讓你的JSON中的每個項目的每個屬性都是ko.observable?如果是的話,我建議使用knockouts貼圖插件http://knockoutjs.com/documentation/plugins-mapping.html這將爲你做到這一點。 – 2012-01-18 20:24:23

+0

謝謝,我想要的是遵循knockoutjs學習中的同一個示例從odata獲取所有電子郵件並綁定到列表,但是我寫了一個操作返回JSON數據,因此我使用$ .getJSON獲取數據,並且綁定到列表。在教程中,它不需要綁定每個項目的所有屬性,只需獲取數據並更新可觀察文件夾,然後循環查看每封電子郵件。我會先嚐試地圖插件,看看它是否工作。 – Roger 2012-01-18 22:05:23

相關問題