我处于需要将具有淘汰赛绑定的元素加载到 DOM 的情况,但我并不总是希望这些绑定进行评估。在以下示例中,请参阅内部 div 了解我的意思:
<ul data-bind="foreach: planets">
<li>
Planet: <b data-bind="text: name"> </b>
<div data-bind="if: capital">
I still want to load this text for later display, when I define "capital"
Capital: <b data-bind="text: capital.cityName"> </b>
</div>
</li>
</ul>
<script>
ko.applyBindings({
planets: [
{ name: 'Mercury', capital: null },
{ name: 'Earth', capital: { cityName: 'Barnsley' } }
]
});
</script>
我的特殊情况是,我为要加载到 dom 中的元素有“编辑”和“不编辑”模板,这两个模板都已加载到页面中。当我将此元素的新实例添加到页面时,我遇到了问题,因为“未编辑”模板已加载并查找尚未定义的值(因为用户正在将它们添加到新对象)。
我的具体例子:
<!-- ko foreach: books -->
<div data-bind="visible: !editing()" class="row-fluid card-box">
<div data-bind="visible: !isPaperback()"> // I want to load this but not evaluate the isPaperback because the user hasn't defined that yet - currently getting null reference errors here
</div>
</div>
<div data-bind="visible: editing" class="row-fluid card-box">
</div>
<!-- /ko -->
我能想到的一个解决方案与我上面的问题配对,但如果有更好的方法来完成这项工作,我绝对愿意接受建议。为我的“newBook”对象设置非空默认值会更好吗,当用户单击“添加”时,它会被推送到“books”数组中?