2013-02-23 57 views
3

我從Web API檢索Json數據。該數據的格式爲:在基於未命名數組的基於映射生成的基因敲除模型中訪問值

[{"CustomerID":1,"CustomerName":"John"},{"CustomerID":2,"CustomerName":"Sally"}] 

真正的數據自然是更復雜的,但它有一個項目數組不具有「名稱」,例如,{「客戶」的格式:[。 ..]}。我無法改變傳遞的數據,所以這是我必須忍受的。

我想創建此數據與映射插件淘汰賽模型,並將其綁到視圖:

var vmCustomers = ko.mapping.fromJS(jsonObject); 
ko.applyBindings(vmPartners); 

我現在的問題是,我不知道如何訪問的HTML數據-頁。我可以看到,如果我檢查vmCustomers並在_latestValue中鑽取數據,那麼數據已經加載到模型中。

我希望能夠在HTML做的是

foreach: customers 

相應的事情,我可以得到它通過手動建立淘汰賽模型的工作,只需使用.mapping來填補它(或甚至手動填充它),但我想避免這種情況。我正在尋找的是從HTML代碼中獲取淘汰模型中頂級數組的方法。

我是非常新的淘汰賽,所以可能有一些基本的東西我缺少。

+0

你想要在html中綁定的地方?要輸入元素可能是? – DevelopmentIsMyPassion 2013-02-23 20:00:44

+0

例如,我想將它綁定到一個無序列表。如果數組的名稱是客戶,它會看起來像

2013-02-23 20:03:06

+0

你有沒有看到這個網站knockoutjs.com 。 – DevelopmentIsMyPassion 2013-02-23 20:04:36

回答

3

不要打擊KO。只要創建一個適當的viewmodel,你有一個customers屬性來保存你的數據,這是KO的方式。無論如何,當你將有地方放置額外的邏輯/數據時,視圖模型將會很方便。

var viewModel = { customers: ko.mapping.fromJS(jsonObject); } 
ko.applyBindings(viewModel); 

然後你可以讓你的data-bind="foreach: customers"在你看來。

但是,如果你不想要一個視圖模型,並且你想綁定到一個數組,你不能使用像「customers」這樣的名稱來訪問它,你需要使用current context來引用它:使用$data屬性:

data-bind="foreach: $data" 

JS

var vmCustomers = ko.mapping.fromJS(jsonObject); 
ko.applyBindings(vmCustomers); 

演示JSFiddle

+0

THX!我實現了你所建議的變體,這也給了我一個合適的視圖模型來放入邏輯。我做的是: – 2013-02-23 21:01:22

+0

THX很多!我實現了你所建議的變體。我做的是:function vmCustomers(){var self = this; self.customers = ko.mapping.fromJS(jsonObject); }然後當然ko.applyBindings(new vmCustomers());.它給了我很少的代碼,一個合適的視圖模型以及從HTML獲取數據的更好方法。 Thx再次! – 2013-02-23 21:08:00