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>
只是为了查看price
和highestBid
的值。这些值按预期工作。
答案 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
可以是string
或numeric
值,则不要使用===
运算符进行比较,因为它还会评估对象的类型。在数据绑定条件中使用==
运算符。