2014-02-13 29 views
0

我一直在使用Knockout.js,現在正在調整頁面以從服務器讀取json。它正在工作,直到我切換到使用knockout.mapping(使事情更容易)。knockout.mapping不工作

它呈現(只有一次)

… 
<p>hello <span data-bind="text: name"></span></p> 
… 

在Chrome調試器我看到viewModel.rows()Array[4],但4個對象顯示爲空。

出了什麼問題?

<!DOCTYPE html> 
<html> 
    <head></head> 

    <body> 
    <div data-bind="foreach: rows"> 
     <!-- ko with: value --> 
     <p>hello <span data-bind="text: name"></span></p> 
     <!-- /ko --> 
    </div> 
    </body> 

    <script src="script/knockout-3.0.0.js"></script> 
    <script src="script/knockout.mapping-2.4.1.js"></script> 

    <script> 

var viewModel = null; 

function load(){ 
    f = function(data) { 
     if (viewModel == null){ 
      viewModel = ko.mapping.fromJSON(data); 
     }else{ 
      ko.mapping.fromJSON(data,viewModel); 
     } 
    }; 

    f(
'{ 
    "total_rows" : 4, 
    "rows" : [ 
     { 
     "value" : { 
      "_id" : "e47b7701-cb51-4746-a02b-8a5203afa0a5", 
      "name" : "alice", 
      "_rev" : "13-327c79c92082537f7764b3d5601f1829" 
     }, 
     "id" : "e47b7701-cb51-4746-a02b-8a5203afa0a5", 
     "key" : 50 
     }, 
     { 
     "value" : { 

      "_id" : "f450ccc5-3132-41a3-ade7-193d100e035b", 
      "name" : "bob", 
      "_rev" : "13-36dcb1ec370bcc27507b7d78ad66a5eb" 
     }, 
     "id" : "f450ccc5-3132-41a3-ade7-193d100e035b", 
     "key" : 100 
     }, 
     { 
     "value" : { 
      "_id" : "c5bf17ce-f482-4bd7-a6c4-1b098aa213f8", 
      "name" : "clare", 
      "_rev" : "7-7b6acade5106e4b064249e7446dbc451" 
     }, 
     "id" : "c5bf17ce-f482-4bd7-a6c4-1b098aa213f8", 
     "key" : "0" 
     } 
    ], 
    "offset" : 0 
}' 
    ); 
} 

load(); 

ko.applyBindings(viewModel); 
    </script> 
</html> 
+0

你可以創建一個小提琴演示你的問題? –

+0

你是否想要你的嵌套對象的('value')屬性是可觀察的? – rwisch45

+0

@PWKad http://jsfiddle.net/dqEXZ/ –

回答

0

您將JSON數據作爲字符串傳遞給f函數,而不是作爲JavaScript對象。因此,您需要使用ko.mapping.fromJSON而不是ko.mapping.fromJS

+0

很抱歉,當我將代碼拖入代碼而不是從服務器獲取代碼時,出現了一些問題。 (有固定的問題) –

+1

好,現在你的代碼工作對我來說完全沒有問題,只要我從JSON字符串中刪除所有新行,因爲你不能有一個JavaScript字符串換行符,沒有他們逃跑。 –

+0

是的,我只是修復了這條新線路,而且工作。所以看起來它只是更大的程序有bug,可能不是淘汰賽的錯。現在應該不難調試。謝謝。 –