【问题标题】:knockout / knockoutjs if statement is not working.. baffled by this如果语句不起作用,则敲除/敲除js..对此感到困惑
【发布时间】:2014-01-20 03:45:56
【问题描述】:

新年快乐,我有以下关于 knockoutjs if 语句的问题。

我有以下

  z.object = ko.observableArray(ko.utils.arrayMap([{"Id":3,"Date":"2014"}]))

  <div data-bind="text: Date"></div>

上面打印正常,2014 但下面 if 语句不起作用.. 发生了什么?

 <!-- ko if: Date === 2014 -->
 <!-- /ko -->

我对此完全感到困惑。

【问题讨论】:

  • 试试==而不是===
  • 是 == 也不起作用。唯一表明 if 中发生的事情是 assign symbol = .. lol .. 始终为真。
  • 你能把ko.observableArray(ko.utils.arrayMap([{"Id":3,"Date":"2014"}]))的结果贴出来
  • 这就是结果 ebram。我把它从萤火虫身上弄下来了。
  • 尝试使用&lt;!-- ko if: Date() == 2014 --&gt;,如果你的 Date 属性是可观察的,你需要()

标签: knockout.js knockout-2.0 knockout-mapping-plugin knockout-validation knockout-mvc


【解决方案1】:

来自SO answer here

标识 (===) 运算符的行为与相等 (==) 运算符的行为相同,只是不进行类型转换,并且类型必须相同才能被视为相等。

所以在你的声明Date === 2014 中,这里Date 是字符串,2014 是数字,那么结果是假的。

要么将字符串转换为数字,将数字转换为字符串,要么使用== 而不是===

【讨论】:

  • @NoviceDeveloper 我试过ko.observableArray(ko.utils.arrayMap([{"Id":3,"Date":"2014"}])) 但我收到错误undefined is not a function,它对你有用吗!?
  • 哦..我忘了说有一个foreach语句..你需要将它包装在foreach中,然后访问Date,因为它是一个数组。
  • 那么你需要得到父母的参考
  • 我有 .. 这就是为什么日期是我打印文本的原因:日期显示 2014。
【解决方案2】:

简单的例子对我来说似乎可以使用 ==,但不是 ===,请看这个小提琴:

http://jsfiddle.net/cr2QT/2/

<div data-bind="text: Date"></div>

<hr>
<!-- ko if: Date == 2014 -->
<h1>Oogah Chaka (==)</h1>
<!-- /ko -->

<hr>
<!-- ko if: Date === 2014 -->
<h1>Chaka (===)</h1>
<!-- /ko -->

var viewModel = {
  Date: "2014"
}
ko.applyBindings(viewModel);

【讨论】:

    猜你喜欢
    • 2014-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多