if和ifnot binding不能按预期工作

时间:2015-09-05 06:16:17

标签: knockout.js

highestBid定义为ko.observable()

我的HTML代码是:

<span data-bind="if:highestBid() === '-Infinity'">
     <span data-bind="text:price"></span> <small style="font-size:13px" class="text-muted ">Rs. (Initial Bid) </small>
</span>
<span data-bind="ifnot:highestBid() === '-Infinity'">
     <span data-bind="text:highestBid"></span> <small style="font-size:13px" class="text-muted ">Rs. (current Bid) </small>
</span>

现在,即使highestBid等于-Infinity,也始终执行第二个ifnot条件。 我做错了什么?

更新 我将我的HTML更新为:

<span data-bind="text:highestBid()"></span>
<span data-bind="text:price"></span> 
<span data-bind="if:highestBid() === '-Infinity'">
      <span data-bind="text:price"></span> <small style="font-size:13px" class="text-muted ">Rs. (Initial Bid) </small>
 </span>
 <span data-bind="ifnot:highestBid() === '-Infinity'">
       <span data-bind="text:highestBid"></span> <small style="font-size:13px" class="text-muted ">Rs. (current Bid) </small>
 </span>

只是为了查看pricehighestBid的值。这些值按预期工作。

2 个答案:

答案 0 :(得分:3)

在代码中if/ifnot条件完全没问题,但是如果绑定有任何中断,即如果/ if not内部代码将显示,则某些内容未定义。

Sample Scenario here重现您的问题

查看:

<span data-bind="if:highestBid() === '-Infinity'">
     <span style="color:red;" data-bind="text:'ifCondtion'"></span> <small style="font-size:13px" class="text-muted ">Rs. (Initial Bid) </small>
</span>
<span data-bind="ifnot: highestBid() === '-Infinity'">
     <span style="color:red;" data-bind="text:'ifnotcondition'"></span> <small style="font-size:13px" class="text-muted ">Rs. (current Bid) </small>
</span>

工作样本 here

替代方式:

您可以在视图中使用negation运算符,并避免{strong> this

ifnot

你也可以避免在视图中进行条件检查(使视图变脏)并像 this (优先恕我直言)那样进行viewModel

如果-Infinity是数字,请检查: 我认为-Infinity是一个强硬的字符串似乎是一个数值,那么你不应该使用===,因为你正在与字符串-Infinity进行比较尝试不那么安全的检查== <强> here

答案 1 :(得分:2)

如果highestBid可以是stringnumeric值,则不要使用===运算符进行比较,因为它还会评估对象的类型。在数据绑定条件中使用==运算符。