Подтвердить что ты не робот

Для чего используется второй параметр applyBindings?

Я смотрю, но не могу найти документацию для applyBindings(). Что может содержать второй параметр на законных основаниях? Может ли это быть множеством элементов? Должен ли он быть одним элементом? Могут ли привязки применяться к дочерним элементам из двух отдельных узлов, дважды используя applyBindings?

       ko.applyBindings(myViewModel, div1);
       ko.applyBindings(myViewModel, div2);
4b9b3361

Ответ 1

KnockoutJS является открытым исходным кодом. Из соответствующего файла:

ko.applyBindings = function (viewModelOrBindingContext, rootNode) {
    // Some code omitted for brevity...

    if (rootNode && (rootNode.nodeType !== 1) && (rootNode.nodeType !== 8))
        throw new Error("ko.applyBindings: first parameter should be your view model; second parameter should be a DOM node");
    rootNode = rootNode || window.document.body; // Make "rootNode" parameter optional

    applyBindingsToNodeAndDescendantsInternal(getBindingContext(viewModelOrBindingContext), rootNode, true);
};

Итак, да, кажется, это должен быть единственный DOM node. Чтобы быть более конкретным, nodeType должен быть либо 1 (ELEMENT_NODE), либо 8 (COMMENT_NODE), в противном случае ошибка выброшены.

соответствующая документация ( "Активация нокаута" ) менее выражена, поскольку она должна быть DOM node, но (см. по мне) делает то же самое:

Необязательно, вы можете передать второй параметр, чтобы определить, какая часть документа вы хотите найти атрибуты data-bind. Например, ko.applyBindings(myViewModel, document.getElementById('someElementId')). Это ограничивает активацию элемента с идентификатором someElementId и его потомками, что полезно, если вы хотите иметь несколько моделей просмотра и связывать их с другой областью страницы.

Пока узлы не разделяют часть дерева (например, они являются братьями и сестрами), вы можете безопасно называть applyBindings на каждом из узлов (на самом деле, это одна из причин использования второго аргумента).

См. этот связанный вопрос для типичного варианта использования.

Ответ 2

Можно найти по следующей ссылке... http://knockoutjs.com/documentation/observables.html

Если вы задаетесь вопросом, что делают параметры ko.applyBindings,

Первый параметр указывает, какой объект модели просмотра вы хотите использовать с декларативные привязки, которые он активирует.

При желании вы можете передать второй параметр, чтобы определить, какая часть документ, который вы хотите найти для атрибутов привязки данных. Например, ko.applyBindings(myViewModel, document.getElementById( 'someElementId')). Это ограничивает активация элемента с идентификатором someElementId и его потомками, что полезно, если вы хотите иметь несколько моделей просмотра и ассоциировать каждый с другой областью страницы.

Ответ 3

Если кто-то хочет использовать классы для реализации этого

for i of $('.myView')
  ko.applyBindings(new MyView(),$('.myView')[i])

Ответ 4

если вы используете JAVA Script, затем перейдите к корневому элементу node

 ko.applyBindings(vm, document.getElementById("yourRootID"));

В моем случае HTML выглядит так:

<table id="yourRootID" border="1" class="table">
    <thead>
        <tr data-bind="foreach: columnNames">
            <th> <span data-bind="text: $data"></span></th>
        </tr>
    </thead>
    <tbody data-bind="foreach: items">
        <tr data-bind="foreach: $parent.columnNames">
            <td data-bind="text: $parent[$data]"></td>
        </tr>
    </tbody>
</table>

не забудьте использовать document.elementByID, потому что для этого требуется root node