knockout.js - KnockoutJs v2.3.0:錯誤您無法多次將綁定應用於同一元素




6 Answers

您只需要在再次使用“applyBindings”之前刪除綁定。

ko.cleanNode($element[0]);

應該做的伎倆。 HTH。

我剛剛升級到2.3.0,現在我收到錯誤'你不能多次將綁定應用到同一個元素。' 我沒有進入2.2.1。

我從MVC控制器獲取局部視圖,並在點擊href後將其添加到頁面中。 第二次單擊鏈接以獲取局部視圖時發生錯誤。 我這樣做了很多次。

有沒有辦法清除這一點並避免拋出新的錯誤?

這是我的代碼:

$.get(url + "GetAssignedCompaniesView?layoutId=" + layoutId + "&noCache=" + new Date().getMilliseconds(), function (result) {
              $("#editAssignedPartial").html($(result));
              showEditAssignedArea(true);
              $(window.document).ready(function () {
                 // error is thrown here
                 ko.applyBindings(self, window.document.getElementById("editAssigned"));
                 $("#layoutId").attr("value", layoutId);
                 updateTypeHiddenElement.attr("value", "companies");
      });
    });
<div id="editAssignedPartial">
</div>

$(document).ready(function () {
  'use strict';
  var vm = new Vm();
  ko.applyBindings(vm, document.getElementById("area1"));
});



您不應該多次對視圖應用綁定。 在2.2中,行為未定義,但仍然不受支持。 在2.3中,它現在正確顯示錯誤。 使用knockout時,目標是將綁定一次應用於頁面上的視圖,然後對viewmodel上的observable使用更改來更改頁面上視圖的外觀和行為。




這個問題有很多很好的答案,但我有一個noobie答案。

我發現我偶然在兩個地方添加了相同的腳本,它試圖綁定兩次。 因此,在您解決一個簡單的錯誤之前,請確保檢查此問題。




如果你反復重複使用一個元素(在我的情況下是一個bootstrap模式對話框),那麼多次調用ko.applyBindings(el)將導致這個問題。

相反,只需這樣做一次:

if (!applied) {
    ko.applyBindings(el);
    applied = true;
}

或者像這樣:

var apply = function (viewModel, containerElement) {
    ko.applyBindings(viewModel, containerElement);
    apply = function() {}; // only allow this function to be called once.
}

PS:如果您使用映射插件並將JSON數據轉換為可觀察數據,這可能會更頻繁地發生。




我在IE7 / IE8中遇到了同樣的錯誤。 在包括IE9 / IE10在內的所有其他瀏覽器中都運行良好。

我發現對我有用的是消除自閉標籤。

<div>
    <span data-bind="text: name"/>
</div>

<div>
    <span data-bind="text: name"></span>
</div>



在我的情況下,我添加到一個非現有元素,或者,我正在添加綁定到可能存在的元素,但它的父級沒有。 與此類似:

var segDiv =  $("#segments"); //did not exist, wrong id
var theDiv = segDiv.html("<div></div>");

ko.applyBindings(someVM, theDiv);

據我所知,這個錯誤似乎有點過載,因為它會觸發很多不同的錯誤,這些錯誤可能會發生在元素上,就像它不存在一樣。 因此,錯誤描述可能具有高度欺騙性。 它應該可能已讀:

“無法將綁定綁定到元素。可能的原因包括:多次綁定嘗試,元素不存在,元素不在DOM層次結構中,元素在瀏覽器中等等”




Related