我有一個viewModel answerGroup對象的數組。當其中一個answerGroup對象的feedback屬性更新時,我想通過將ajax傳遞給我的ASP.Net MVC應用程序來將更新的對象保存到我的數據庫中。事件綁定在knockout.js
而不是有一個典型的保存按鈕或鏈接,我希望對象的屬性已更新時傳遞給Ajax調用。我想我可以通過綁定到textarea元素的change事件來做到這一點,但如果我這樣做,ajax函數被調用,但底層answerGroup對象的反饋屬性不會更新。
我正在使用淘汰賽1.2.1。下面是javascript代碼,我沒有包含HTML。
我是以這種錯誤的方式去做的,還是僅僅是我的knockout.js事件綁定語法不正確?
任何人都可以幫忙嗎?
<script>
var viewModel = {}
$(function() {
viewModel.scenarioId = ko.observable($("#Scenario_ScenarioID").val());
viewModel.answerGroups = ko.observableArray([]);
viewModel.addGroup = function (answerGroup) {
// add item to beginning of array
this.answerGroups.unshift(answerGroup);
};
ko.applyBindings(viewModel);
});
function answerGroup() {
this.id = ko.observable();
this.name = ko.observable();
this.feedback = ko.observable();
// the groups feedback has been updated so save
// these details back to the server
this.updateGroup = function (event) {
// javascript api library that is an ajax function.
// this works without a problem.
api.updateAnswerGroup({
success: function (result) {
alert("saved!");
},
error: function (e) {
alert("error!");
},
data: "answerGroupId=" + this.id + "&feedback=" + this.feedback
});
return true;
};
}
</script>
<script id="answerGroupsTemplate" type="text/html">
<div>
<h4><a href='#'>${ $data.name }</h4>
<div>
<textarea cols="100" rows="2" data-bind="event: { text: feedback, change: updateGroup }">
</textarea>
</div>
</div>
</script>
也許我懶,但我認爲它太多的代碼。哪一部分是相關部分 – Ibu 2011-06-05 18:47:44
伊布 - 所有這些都是相關的,我沒有列入不相關的部分。 – Robini 2011-06-05 20:38:40
updateGroup函數被調用,但反饋屬性的基礎值未更新。我需要反饋屬性來更新,然後調用updateGroup函數,以便我可以將此屬性的值傳遞迴服務器。 – Robini 2011-06-05 20:41:28