在数据绑定文本上使用if语句

时间:2015-08-28 18:56:38

标签: knockout.js

我无法弄清楚如何在text绑定中放置if语句。

<tbody data-bind="foreach: model.poCollection">
    <tr>
        <td>
            <input type="checkbox">
        </td>
        <td data-bind="text: RlseNbr"></td>
        <td data-bind="text: Clin"></td>
        <td data-bind="text: PrchOrdNbr"></td>
        <td data-bind="text: RqstnCntrlNbr"></td>
        <td data-bind="text: {(DtCntrctDlvry == '0') ? 'a' :'b'}"></td>
    </tr>

当我尝试将if语句放入其中时,不知道我做错了什么,数据不再显示。

1 个答案:

答案 0 :(得分:7)

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

  1. 普通属性:DtCntrctDlvry = 0;或
  2. Observables:DtCntrctDlvry = ko.observable(0)
  3. 如果你进行简单的绑定,绑定处理程序并不关心它是什么,例如:

    <span data-bind="text: DtCntrctDlvry"></span>
    

    但如果你开始把逻辑放在那里,他们关心。以上情况分别要求:

    1. 普通属性:

      <span data-bind="text: DtCntrctDlvry === 0 ? 'a' : 'b'"></span>
      
    2. 观测量:

      <span data-bind="text: DtCntrctDlvry() === 0 ? 'a' : 'b'"></span>
      
    3. 在任何情况下,请参阅my answer to another question我认为如果将逻辑包裹在computed内,你会更好,例如:

      var ViewModel = function() {
        var self = this;
        self.DtCntrctDlvry = ko.observable(0);
        self.DtCntrctDlvryText = ko.computed(function() {
          return self.DtCntrctDlvry() === 0 ? "a" : "b";
        });
      }
      

      并像这样绑定:

      <span data-bind="text: DtCntrctDlvryText"></span>
      

      PS。一些脚注:

      1. 您是否意识到您正在使用==,而您可能更喜欢===
      2. 您编写'0'(零,但作为字符串)而不是0(作为数字)的任何原因?
      3. 在我的回答中,我假设两种情况你打算使用后者。如果没有,您可能需要调整我的解决方案。