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 标记,它应该已修复。