#knockout.js
#knockout.js
Вопрос:
Почему следующие parent
или root
привязки не приведут к сбою knockout:
ko.applyBindings({
child: {}
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.2/knockout-min.js"></script>
<!-- ko with: child -->
<input type="checkbox" data-bind="checked: $parent.bogus">
<input type="text" data-bind="text: $root.bogus">
<!-- /ko -->
…в то время как этот…
ko.applyBindings({
child: {}
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.2/knockout-min.js"></script>
<input type="checkbox" data-bind="checked: bogus">
… и это…
ko.applyBindings({
child: {}
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.2/knockout-min.js"></script>
<input type="text" data-bind="text: bogus">
… правильно ли выполняется аварийный вывод с сообщением об ошибке «поддельный не определен»?
Я бы ожидал, что все они завершатся сбоем. Есть ли причина, по которой привязки $ parent / $ root не должны аварийно завершаться?
Ответ №1:
Если вы переносите привязки внутри анонимной функции, подобной приведенной ниже, она не завершается сбоем —
<input type="checkbox" data-bind="checked: function() {bogus}">
<input type="text" data-bind="text: function(){bogus}">
или внутри переключения контекста, как показано ниже
<!--ko with: child-->
<input type="checkbox" data-bind="checked: $parent.bogus">
<input type="text" data-bind="text: $root.bogus">
<!--/ko-->
Однако, в тот момент, когда вы немедленно вызываете функцию в привязке, как показано ниже, происходит сбой —
<input type="checkbox" data-bind="checked: function() {bogus}()">
<input type="text" data-bind="text: function(){bogus}()">
или даже это —
<input type="checkbox" data-bind="checked: $parent.bogus">
<input type="text" data-bind="text: $root.bogus">
Итак, при этом мне кажется, что при переносе привязок с помощью контекстного переключателя, подобного with
(или может быть using
), оценка привязки каким-то образом откладывается на какой-то момент позже.
В то время как в противном случае привязка вычисляется во время создания DOM, во время которого bogus
остается неопределенной.