Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/402.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如果模板内的绑定现在不显示,则无论可观察对象持有什么值,都会被淘汰?_Javascript_Data Binding_Knockout.js - Fatal编程技术网

Javascript 如果模板内的绑定现在不显示,则无论可观察对象持有什么值,都会被淘汰?

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

我有一个简单的模板,里面有一个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 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>