gpt4 book ai didi

javascript - Knockout + MVC - 您不能将绑定(bind)多次应用于同一元素

转载 作者:行者123 更新时间:2023-12-03 13:18:27 26 4
gpt4 key购买 nike

我的 MVC View :

@model MG.ViewModels.Profile.ProfileDetailsViewModel
<div>
<h4>About Me</h4>
<!-- ko if: !isEditingAboutMe() -->
<p data-bind="text: aboutMe()">@Model.AboutMe</p>
@if (Model.CurrentUserCanEdit)
{
<a data-bind="click: editAboutMe">edit</a>
}
<!-- /ko -->
<!-- ko if: isEditingAboutMe() -->
@Html.TextBoxFor(model => model.AboutMe, new { data_bind = "value: aboutMe" })
<a data-bind="click: saveAboutMe">save</a>
<a data-bind="click: cancelAboutMe">cancel</a>
<!-- /ko -->
</div>

<script type="text/javascript">ko.applyBindings(@Html.Raw(Json.Encode(Model)));</script>

我的 ProfileVm Javascript:

function ProfileVm() {
var self = this;

self.saveAboutMe = function() {
self.isEditingAboutMe(false);
};

self.cancelAboutMe = function() {
self.isEditingAboutMe(false);
};

self.isEditingAboutMe = ko.observable(false);
self.editAboutMe = function() {
self.isEditingAboutMe(true);
};

}

$(document).ready(function () {
ko.applyBindings(new ProfileVm());
})

我正在通过一个包在 Layout.cshtml 中加载 ProfileVm:

    @Scripts.Render("~/bundles/viewmodels")

我调用了两次 ko.applyBindings() - 一次直接在我的 View 中将 MVC 模型绑定(bind)到 knockout 可观察对象,另一次绑定(bind) ProfileVm 的属性。

我做错了什么?

最佳答案

您不应该对相同的元素多次调用 ko.applyBindings,因为它可能会向相同的元素添加多个事件处理程序和/或将不同的数据绑定(bind)到元素。在 KO 2.3 中,这现在会引发异常。

ko.applyBindings 确实接受第二个参数,该参数指示要在绑定(bind)中使用的根元素。

因此,可以执行如下操作:

<div id="left">
....
</div>

<div id="right">
....
</div>

然后,你会像这样绑定(bind):

ko.applyBindings(leftViewModel, document.getElementById("left"));
ko.applyBindings(rightViewModel, document.getElementById("right"));

如果您遇到元素实际重叠的情况,那么您将不得不执行以下操作:http://www.knockmeout.net/2012/05/quick-tip-skip-binding.html

关于javascript - Knockout + MVC - 您不能将绑定(bind)多次应用于同一元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18840173/

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