後,無法更新Knockout.js ViewModel在初始頁面加載時,我的數據正常加載。我有一個刪除函數,它通過.ajax調用我的控制器並刪除數據庫中的項目OK,然後發回新的JSON項目列表。一切工作,直到我調用ko.mapping.fromJS(data.newData,viewModel),然後頁面停止,沒有錯誤消息。如果我添加一個警報(data.newData),我會看到正確的Json。以下是代碼,任何人都可以看到我做錯了什麼?在.ajax調用
<script>
var initialData = @Html.Raw(Json.Encode(Model));
var viewModel = {
trainingDocs : ko.observableArray(initialData)
};
function deleteDoc(doc) {
$.ajax({
url: "/Admin/_DeleteTrainingDocument/"+doc.TrainingDocumentId,
type: "POST",
data: "",
success: function (data) {
if (data.Result) {
$("#userMessage").html("<img src='/content/Status_1.png' align='bottom' />" + data.Message);
ko.mapping.fromJS(data.newData, viewModel);
} else {
$("#userMessage").html("<img src='/content/Status_0.png' align='bottom' />" + data.Message);
}
},
error: function (jqXhr, textStatus, errorThrown) {
alert("Error '" + jqXhr.status + "' (textStatus: '" + textStatus + "', errorThrown: '" + errorThrown + "')");
},
complete: function() {
}
});
};
ko.applyBindings(viewModel, document.body);
</script>
<table class="agent-info">
<thead>
<tr>
<th>Title</th>
<th>Action</th>
</tr>
</thead>
<tbody data-bind="foreach: trainingDocs">
<tr>
<td><span data-bind="text:Title"></span></td>
<td><a href="#" id="whiteLinks" data-bind="click: function() { if(confirm('Are you sure you want to delete '+$data.Title+'?')) deleteDoc($data) }">delete</a></td>
</tr>
</tbody>
</table>
<div id="userMessage">
Results
</div>
你還可以添加你的HTML顯示數據綁定?更好的將是一個jsfiddle顯示你的錯誤 – peacemaker
OK調解人,我編輯我的問題,並添加了HTML。我對Knockout.js是全新的,所以我還沒有對jsfiddle有足夠的瞭解,儘管我已經看到了它的一些例子。 –