为什么以下parent
或root
绑定不会导致淘汰赛崩溃:
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绑定不应该崩溃是有原因的吗?
答案 0 :(得分: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
)之类的上下文开关包装绑定时,绑定评估会以某种方式推迟到某个时候。
如果不是,则在创建bogus
时定义DOM时评估绑定。