Knockout.js 对数据绑定文本使用if语句

Knockout.js 对数据绑定文本使用if语句,knockout.js,Knockout.js,我不太明白如何将if语句放入文本绑定中 不确定我在尝试将if语句放入其中时出错了什么,数据将不再显示。您没有提供足够的信息,但我们可以安全地假设以下两种情况之一: 普通属性:DtCntrctDlvry=0;或 可观测值:DtCntrctDlvry=ko。可观测值(0) 如果执行简单绑定,绑定处理程序不关心它是哪一个,例如: 但如果你开始把逻辑放进去,他们会很在意的。上述情况分别要求: 普通属性: 可观察到: 在任何情况下,请查看我的论点,如果您将逻辑封装在一个计算的中,您会做得更

我不太明白如何将if语句放入
文本
绑定中



不确定我在尝试将if语句放入其中时出错了什么,数据将不再显示。

您没有提供足够的信息,但我们可以安全地假设以下两种情况之一:

  • 普通属性:
    DtCntrctDlvry=0
    ;或
  • 可观测值:
    DtCntrctDlvry=ko。可观测值(0)
  • 如果执行简单绑定,绑定处理程序不关心它是哪一个,例如:

    
    
    但如果你开始把逻辑放进去,他们会很在意的。上述情况分别要求:

  • 普通属性:

    
    
  • 可观察到:

    
    
  • 在任何情况下,请查看我的论点,如果您将逻辑封装在一个
    计算的
    中,您会做得更好,例如:

    var ViewModel=function(){
    var self=这个;
    self.DtCntrctDlvry=ko.可观察(0);
    self.DtCntrctDlvryText=ko.computed(函数(){
    返回self.DtCntrctDlvry()==0?“a”:“b”;
    });
    }
    
    然后像这样捆绑:

    
    

    附:一些脚注:

  • 您是否意识到您正在使用您可能更喜欢的
    ==
  • 有没有什么原因让你写的是
    '0'
    (零,但作为一个字符串)而不是
    0
    (作为一个数字)

  • 在我的回答中,我假设两种情况下,您都打算使用后者。如果没有,您可能需要调整我的解决方案。

    尝试使用
    text:DtCntrctDlvry()=='0'?'a':'b'
    展开@nemesv的评论。如果
    DtCntrctDlvry
    (疯狂名称btw)是可观察的,那么它永远不会等于
    '0'
    ,因为可观察的不是字符串,而是可观察的。通过将可观测值作为函数调用来获取支持值,然后将其与
    '0'
    @nemevs+1进行比较。另一种方式:text:ko.unwrap(DtCntrctDlvry)='0'?'当您在运行时不知道某个属性是否可观察时,最好使用a':'b'@TSV的方法。如果您不想经常担心这些语法问题,还可以使用另一种方法。您可以使用ko.unwrap来避免普通属性和可观察性的问题。这也确实帮助了我!奇怪的是
    ()
    可能造成的差异:D@AceMark可观测的是函数。不带参数调用它们是“getter”,带一个参数调用它们是“setter”。只有在“简单”绑定中才能忽略它们,因为敲除将推断它们。