gpt4 book ai didi

javascript - Knockout.js 中的事件绑定(bind)

转载 作者:行者123 更新时间:2023-12-03 21:47:16 26 4
gpt4 key购买 nike

我有一个包含answerGroup 对象数组的viewModel。当 updateGroup 对象之一的反馈属性更新时,我想通过 ajax 将更新后的对象传递到我的 ASP.Net MVC 应用程序,从而将更新后的对象保存到我的数据库中。

我希望在更新对象的属性时将对象传递给 Ajax 调用,而不是使用典型的保存按钮或链接。我认为我可以通过绑定(bind)到 textarea 元素的更改事件来做到这一点,但如果我这样做,则会调用 ajax 函数,但底层的 answerGroup 对象的反馈属性不会更新。

我正在使用 Knockout 1.2.1。下面是 JavaScript 代码,我没有包含 HTML。

我是否以错误的方式处理这个问题,或者只是我的 Knockout.js 事件绑定(bind)语法不正确?

<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>

最佳答案

在 Knockout 中处理此问题的典型方法是对您想要对其更改使用react的可观察对象进行手动订阅。

所以,你会这样做:

function answerGroup() {
this.id = ko.observable();
this.name = ko.observable();
this.feedback = ko.observable();

this.feedback.subscribe(function (newValue) {
//run your update code here
}, this);
}

订阅函数的第二个参数控制函数运行时的上下文(“this”)。

像这样的订阅的好处是,当可观察对象以编程方式更改或基于 UI 中的绑定(bind)更改时,它将触发。

这里有关于它的简要文档:http://knockoutjs.com/documentation/observables.html#explicitly-subscribing-to-observables

我有一篇文章,其中包含有关使用手动订阅的信息 here也是。

希望这有帮助。

关于javascript - Knockout.js 中的事件绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6245014/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com