Я обнаружил проблему, связанную с нокаутирующими привязками в HTML-частицах.  У меня есть область контейнера на странице.  Его содержимое предназначено для динамической замены в соответствии с логикой моего приложения.  Для этого я использую технику отсоединения/добавления.  Однако я заметил, что обновления не распространяются, когда элемент отсоединен.  Мало того, в некоторых случаях привязки вообще теряются, а когда элемент прикрепляется обратно, обновление перестает работать.
Обновление данных важно в моем случае, потому что, хотя элемент может быть невидимым, он все равно может обновляться асинхронно.<  br/> Я нашел потоки в stackoverflow, указывающие на ту же проблему.  Однако однозначного ответа я не нашел.  Были различные обходные пути, которые не выглядели привлекательными (например, использование закрытых методов нокаута).  Единственный способ заставить все работать так, как задумано, — показать/скрыть частичные фрагменты вместо отсоединения/добавления.
Является ли такое поведение преднамеренным (я имею в виду дизайн нокаутной библиотеки)?  Если это так, я бы не хотел обходить это, вводя различные обходные пути, которые потенциально могут привести к новым проблемам в будущем.  Если нет, каков рекомендуемый шаблон использования для добавления/отсоединения в нокауте, чтобы он работал так же, как показ/скрытие (я бы предпочел использовать отсоединение/добавление, потому что основное приложение использует эту политику для всех своих контейнеров).
Вот ссылка jsbin для воспроизведения проблемы. Я также включил пример отображения/скрытия для сравнения: https://jsbin.com/iTIrigAp/3/edit?html,js,output
<h3>Attach/Detach</h3>
<p>issue 1: Detach/Update/Attach/Update</p>
<p>issue 2: Run with JS/Update/Enter new val/Detach/Update/Attach</p>
<div id="attdet">
    <input type="text" data-bind="value: a" />
    <input type="text" data-bind="value: b" />
</div>
<button id="detach">Detach</button>
<button id="update">Update</button>
<button id="attach">Attach</button>
function ViewModel() {
        this.a = ko.observable("a");
        this.b = ko.observable("b");
        this.c = ko.observable("c");
        this.d = ko.observable("d");     
    }
    var vm = new ViewModel();
    ko.applyBindings(vm, document.getElementById("attdet"));
    var nodes = null;
    $("#detach").click(function () {
        nodes = $("#attdet").children().detach();
    });
    $("#attach").click(function () {
        $("#attdet").append(nodes);
    });
    $("#update").click(function () {
        vm.a("att-det");
        vm.b("att-det");
    });
 
                                                                     
                                                                     
                                                                    
if/ifnot, которые позволят Knockout добавлять/удалять разделы DOM, сохраняя при этом связанные значения. 04.02.2014