knockoutjs 3.4 无法再次将绑定应用于同一元素
knockoutjs 3.4 cannot apply binding to the same element again
我有一个与索引页关联的视图模型,类似这样
// html
<div class="collapse navbar-collapse js-navbar-collapse" id="menuholder">
<ul foreachbinding>
<li binding>
</ul>
</div>
<div id="maincontent">
</div>
// javascript
var VM = function () {
var self = this;
self.menuitems = ko.observableArray([]);
self.loadmenu = function () {
jQuery.ajax({
url: "/Home/GetMainMenu",
success: function (html) {
self.menuitems = html.menus
},
async: false
});
}
self.loadmenu();
};
ko.applyBindings(VM, document.getElementById("menuholder"));
如您所见,我仅将绑定应用于 menuholder 元素。
现在我用这个动态加载 maincontent 元素的内容 :
$("#maincontent").load("pages/home.html");
home.html 页面有自己的视图模型,如下所示
//html
<body id="homepage">
</body>
//javascript
var homeVM = function () {
var self = this;
self.topventes = ko.observableArray([]);
self.promos = ko.observableArray([]);
self.arrivage = ko.observableArray([]);
self.nouveaute = ko.observableArray([]);
self.loadcontent = function () {
jQuery.ajax({
url: "/Home/GetHomePageContent",
success: function (html) {
self.topventes = html.topventes;
self.arrivage = html.arrivage;
self.nouveaute = html.nouveaute;
self.promos = html.promo;
},
async: false
});
}
self.loadcontent();
};
ko.applyBindings(homeVM, document.getElementById("homepage"));
但在运行时我收到 "cannot apply bindings multiple times to the same element" 错误。
请问您知道发生了什么事吗?
根本原因是您的 home.html
有 body 标签。会导致KO误解文档的整个结构。无论如何,你不能在那个视图中放置 body
标签。
只需将 body
标记更改为 div
标记,它应该已修复。
我有一个与索引页关联的视图模型,类似这样
// html
<div class="collapse navbar-collapse js-navbar-collapse" id="menuholder">
<ul foreachbinding>
<li binding>
</ul>
</div>
<div id="maincontent">
</div>
// javascript
var VM = function () {
var self = this;
self.menuitems = ko.observableArray([]);
self.loadmenu = function () {
jQuery.ajax({
url: "/Home/GetMainMenu",
success: function (html) {
self.menuitems = html.menus
},
async: false
});
}
self.loadmenu();
};
ko.applyBindings(VM, document.getElementById("menuholder"));
如您所见,我仅将绑定应用于 menuholder 元素。
现在我用这个动态加载 maincontent 元素的内容 :
$("#maincontent").load("pages/home.html");
home.html 页面有自己的视图模型,如下所示
//html
<body id="homepage">
</body>
//javascript
var homeVM = function () {
var self = this;
self.topventes = ko.observableArray([]);
self.promos = ko.observableArray([]);
self.arrivage = ko.observableArray([]);
self.nouveaute = ko.observableArray([]);
self.loadcontent = function () {
jQuery.ajax({
url: "/Home/GetHomePageContent",
success: function (html) {
self.topventes = html.topventes;
self.arrivage = html.arrivage;
self.nouveaute = html.nouveaute;
self.promos = html.promo;
},
async: false
});
}
self.loadcontent();
};
ko.applyBindings(homeVM, document.getElementById("homepage"));
但在运行时我收到 "cannot apply bindings multiple times to the same element" 错误。
请问您知道发生了什么事吗?
根本原因是您的 home.html
有 body 标签。会导致KO误解文档的整个结构。无论如何,你不能在那个视图中放置 body
标签。
只需将 body
标记更改为 div
标记,它应该已修复。