【发布时间】:2011-09-08 20:32:59
【问题描述】:
我有一个带有 answerGroup 对象数组的 viewModel。当 answerGroup 对象之一的反馈属性更新时,我想通过 ajax 将更新后的对象保存到我的数据库中。
我希望在对象的属性已更新时将对象传递给 Ajax 调用,而不是使用典型的保存按钮或链接。我想我可以通过绑定到 textarea 元素的 change 事件来做到这一点,但如果我这样做,会调用 ajax 函数,但不会更新底层 answerGroup 对象的反馈属性。
我正在使用 Knockout 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 - 所有这些都是相关的,我没有包括不相关的部分。
-
调用了 updateGroup 函数,但未更新反馈属性的基础值。我需要更新反馈属性,然后调用 updateGroup 函数,以便我可以将此属性的值传回服务器。
标签: javascript jquery asp.net asp.net-mvc knockout.js