gpt4 book ai didi

javascript - Knockout Js提交绑定(bind)开始无限循环

转载 作者:行者123 更新时间:2023-11-28 02:08:02 25 4
gpt4 key购买 nike

我正在尝试使用 knockout 将我的表单提交给休息服务。按submit按钮后,表单将进入无限循环,直到浏览器崩溃。无法真正理解这里发生了什么。

Javascript:

var viewModel;
var Subscription = function () {
var self = this;

self.Name = ko.observable('');
self.Email = ko.observable('');

self.submitForm = function () {
var viewModelJs = ko.toJS(ko.utils.unwrapObservable(viewModel));

$.ajax('/umbraco/surface/newsletter/AddSubscription', {
data: viewModelJs,
type: "POST",
async: true,
contentType: "application/json",
dataType: "json",
success: function (result) {
alert("sent");
},
error: function (error) {
if (window.console && console.log) {
console.log(error);
}
}
});

return false;
};
};

$(function () {
viewModel = new Subscription();
ko.applyBindings(viewModel);
});

这是我的表格:

<form class="form-horizontal" data-bind="submit: $root.submitForm">
<div class="control-group">
<label class="control-label" for="Name">Nombre</label>
<div class="controls">
@Html.TextBoxFor(m => m.Name, new { placeholder = "Nombre", data_bind = "value: Name" })
@Html.ValidationMessageFor(m => m.Name)
</div>
</div>

<!-- A couple more controls here -->

<div class="control-group">
<div class="controls">
<button type="submit" class="btn">Enviar</button>
</div>
</div>
</form>

最佳答案

ko.toJS 保留函数,就像您使用 jquery 函数一样,它将在数据对象 (viewModelJS) 上运行所有函数。这反过来会导致无限循环。

您可以使用映射对象并忽略这样的函数

  var viewModelJs = ko.mapping.toJS(ko.utils.unwrapObservable(viewModel), {
ignore: ['submitForm']});

关于javascript - Knockout Js提交绑定(bind)开始无限循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17490186/

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