2
我正在接收來自WCF服務的Json數據並想將其映射到我的viewModel。無法將JSON對象映射到ViewModel(敲除js)
JSON數據:
{"bios" :
{ "Caption" : "something",
"Version": "something else",
....
}
}
我HTML部分如下:
<ul class="biosContentUL">
<li class="biosContentLI">
<p>
<b>Caption: </b><span data-bind="text: bios.Caption"></span>
</p>
</li>
<li class="biosContentLI">
<p>
<b>Version: </b><span data-bind="text: bios.Version"></span>
</p>
</li>
.......
</ul>
我視圖模型如下:
var viewModel = {
bios: ko.observable(),
cpu: ko.observable(),
.....
}
$(document).ready(function() {
ko.applyBindings(viewModel);
}
);
我想使用映射插件,但無法使其正常工作。
function showBios() {
var response = $.ajax({
type: "GET",
datatype: "json",
url: "...",
success: function (data) {
objJS= jQuery.parseJSON(data);
viewModel.bios(ko.mapping.fromJS(objJS));
// I also tried this:
// ko.mapping.fromJS(objJS, {}, viewModel);
}
});
下面的代碼工作,但我也有observableArrays在我的ViewModel,所以我失去他們的內容,如果我叫applyBindings()一次。
viewModel.bios = ko.mapping.fromJS(objJS);
ko.applyBindings(viewModel);
如何將接收到的數據映射到我的viewModel屬性「bios」?對於頁面的每個部分都有多個視圖模型是不錯的方法,因此在每個模型中,我可以聲明簡單的屬性,而不是複雜的對象?
在這種情況下,我需要一些布爾變量來表明它是否是第一次調用(並且每次都檢查它)。數據在啓動時不加載 - 只能通過用戶點擊加載。這是解決這個問題的好方法嗎? – 2013-03-14 15:40:14
是的,或者你可以檢查是否(viewModel.bios()),如果它沒有值應該是false。 – 2013-03-14 15:41:56
如果我理解正確,我需要在第一次使用後再次調用applyBindings()。但它可以清除observableArrays中包含的數據,不是嗎? – 2013-03-14 15:42:56