【问题标题】:Use IF condition in Foreach loop for comparision of data-bind values在 Foreach 循环中使用 IF 条件来比较数据绑定值
【发布时间】:2015-01-08 18:20:16
【问题描述】:

我需要在 ForEach 循环中比较从数据库返回的值。我不确定如何提取这个值(即将它存储在一个变量中)并将其用于比较。

<tbody data-bind="foreach: ContractorList">
                            <tr>
                                <td>
                                    <a href="#" data-bind="text: Contractor_Name, click: $root.listContractorDetails"></a>
                                    <span data-bind="text:Contractor_Status"></span>
                                    <span data-bind="if: some-syntax?? ">1</span>
                                    <span data-bind="if: same-syntaxt??">2</span>
                                </td>
                            </tr>
                        </tbody>
                    </table>

data-bind="text:Contractor_Status" 返回“Enrolled”或“Rejected”,如果 Enrolled 我想显示跨度 1,否则跨度 2。请您帮我解决语法问题。

【问题讨论】:

  • 我厌倦了添加一个方法(如下),但它总是默认为 False 位置。 /*code*/ if (self.ContractorStatusList() == 'Enrolled') IsAddPage: ko.observable(true); else IsAddPage: ko.observable(false);
  • 我试图为您提供答案,但我不确定它是否是您正在寻找的......

标签: javascript if-statement foreach knockout-2.0


【解决方案1】:

ContractorList 中的每个承包商都应具有您稍后在 if 绑定中所需的全部属性。

 // where 'x' is a property of each contractor:
 <span data-bind="if: x == 1">1</span>
 <span data-bind="if: x == 2">2</span>

这些属性可能会在您的视图模型源代码中使用Array.prototype.forEach 添加,如下所示:

var myViewModel = function() {
   // I'm sure you're populating this from a JSON source or who knows...
   this.ContractorList = ko.observableArray(); // or ko.observableArray([{}, {}, {}})...

   this.ContractorList.forEach(function(contractor) {
      // It's just a sample, you should set whatever you want in a property that you want
      // to use in an 'if' binding
      contractor.x = 1;
   });
};

【讨论】:

  • 嗨,Matias,编译器怎么知道 x 是什么? ContractorList 是一个可观察的 arroy,具有许多值,例如 Contractor_Name、Contractor_Status 等。我想获取 Contractor_Status 值(我正确获得)并将其用于 IF 比较。有什么建议吗?
  • 我试过了,但没有用 1 2
  • @nyc_316 你需要学习更多关于 KO 的知识!它知道这一点是因为 foreach 绑定的上下文是当前迭代的对象,就像代码中的实际 foreach 一样。如果由于属性名称具有某种类型或谁知道什么不起作用,那么您应该尝试使用 SO 编辑器构建代码 sn-p 以便我可以运行它并检查有什么问题..
  • 马蒂亚斯,感谢您的帮助。您认为下面代码的语法是否正确? 1 2
  • @nyc_316 看起来是对的......顺便说一句,认为这不是聊天......在这里你需要提供一个具体的问题,有人可以帮助你(比如我),但这不是一个黑色的整个嵌套问题:D
【解决方案2】:

我在 HTML 文件中使用了 IF 条件,而不是解决问题的 .js 文件。 请不要以下(以避免我犯的错误) 结束语 双等于(与 === 相比) 获取参数()

<tbody data-bind="foreach: ContractorList">
                            <tr>
                                <td>
                                    <!-- ko if: (ContractorStatusList() == 'Enrolled')-->
                                    <span>1</span>
                                    <!--/ko -->
                                    <!-- ko if: (ContractorStatusList() == 'Rejected')-->
                                    <span>2</span>
                                    <!--/ko -->

【讨论】:

    猜你喜欢
    • 2018-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-29
    • 2020-11-18
    • 1970-01-01
    相关资源
    最近更新 更多