Rob*_*ous 2 javascript asp.net-mvc knockout.js
我的MVC视图:
@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>
Run Code Online (Sandbox Code Playgroud)
我的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());
})
Run Code Online (Sandbox Code Playgroud)
我正在通过捆绑包在Layout.cshtml中加载ProfileVm:
@Scripts.Render("~/bundles/viewmodels")
Run Code Online (Sandbox Code Playgroud)
我正在调用ko.applyBindings()两次 - 一次直接在我看来将MVC模型绑定到knockout observables,另一次绑定ProfileVm的属性.
我究竟做错了什么?
您不应ko.applyBindings多次调用相同的元素,因为它可能会将多个事件处理程序添加到相同的元素和/或将不同的数据绑定到元素.在KO 2.3中,现在抛出异常.
ko.applyBindings 确实接受第二个参数,指示在绑定中使用的根元素.
所以,可以这样做:
<div id="left">
....
</div>
<div id="right">
....
</div>
Run Code Online (Sandbox Code Playgroud)
然后,你会绑定如下:
ko.applyBindings(leftViewModel, document.getElementById("left"));
ko.applyBindings(rightViewModel, document.getElementById("right"));
Run Code Online (Sandbox Code Playgroud)
如果你有一个场景,其中元素实际重叠,那么你必须做这样的事情:http://www.knockmeout.net/2012/05/quick-tip-skip-binding.html
| 归档时间: |
|
| 查看次数: |
11080 次 |
| 最近记录: |