Javascript 如果模板内的绑定现在不显示,则无论可观察对象持有什么值,都会被淘汰?
我有一个简单的模板,里面有一个if绑定:Javascript 如果模板内的绑定现在不显示,则无论可观察对象持有什么值,都会被淘汰?,javascript,data-binding,knockout.js,Javascript,Data Binding,Knockout.js,我有一个简单的模板,里面有一个if绑定: <script type="text/html" id="addPersonTemplate"> <tr> ... <td class="large-7" data-bind="text: addPersonUsername"><span class="noSpecificChecks" data-bind="if: addPersonUsername() == false">No u
<script type="text/html" id="addPersonTemplate">
<tr>
...
<td class="large-7" data-bind="text: addPersonUsername"><span class="noSpecificChecks" data-bind="if: addPersonUsername() == false">No username added</span></td>
...
</tr>
</script>
...
没有添加用户名
...
基本上,一个人可以选择输入用户名。但是,当他们在文档中的其他位置单击“添加”时,无论我尝试了什么,都会输出模板:
如果:addPersonUsername()==false,我无法正确计算
如果表达式的计算结果为true(没有用户名),我希望输出“没有添加用户名”。但是,如果我没有输入用户名,addPersonUsername()变量是未定义的(通过console.log
检查),但不会输出此文本
有什么特别的原因吗?if绑定是否仅在加载HTML页面时计算,而不是在添加模板时计算?我看不出有任何迹象表明它是…敲除可观察对象是函数,因此当它们用于任何表达式(如if
绑定中)时,您需要在不带任何参数的情况下调用它们(例如:addPersonUsername()
)来获取它们的值:
<span class="noSpecificChecks" data-bind="if: addPersonUsername() == false">
演示。Hmm.仍然不起作用。我曾经尝试过把它作为一个表达式来评估,但没有运气console.log()
告诉我addPersonUsername()
的计算结果为未定义,因此它应该出现(undefined==false在JS中为true,对吗?)您的文本绑定也有问题。检查我的最新答案。啊,哥们儿。因此,是父文本绑定导致了问题。干杯
<td class="large-7" >
<!-- ko if: addPersonUsername -->
<span data-bind="text: addPersonUsername"></span>
<!-- /ko -->
<span class="noSpecificChecks" data-bind="if: addPersonUsername() == false">No username added
</span>
</td>