js foreach在未显示的项目列表上

Knockout.js foreach on list of items not displaying

本文关键字:项目 列表 显示 foreach js      更新时间:2023-09-26

这行不通

                <div data-bind="foreach:nonAdminIB">
                    <div><span data-bind="text: explanation"></span>&nbsp;</div>
                </div>

这确实显示了数据,但我已经硬编码了索引号,我真的不知道会有多少项。

                <div><span data-bind="text: nonAdminIB[0].explanation"></span>&nbsp;</div>
                <div><span data-bind="text: nonAdminIB[1].explanation"></span>&nbsp;</div>

这是发送给浏览器的数据

  "nonAdminIB": {
    "0": {
      "nonAdminIrregularBehaviorId": 383,
      "irregularBehaviorId": 5,
      "irregularBehaviorDescription": "Falsified Information",
      "explanation": "Falsification of information on applications/scheduling permits."
    },
    "1": {
      "nonAdminIrregularBehaviorId": 384,
      "irregularBehaviorId": 6,
      "irregularBehaviorDescription": "Falsified Score",
      "explanation": "Falsification of score information. "
    }

我如何让每一个工作?

nonAdminIB目前是一个对象,foreach只能在数组上工作。

你必须把它转换成数组:

var nonAdminIBArray = [];
for(var prop in nonAdminIB) {
  if(nonAdminIB.hasOwnProperty(prop)) {
    nonAdminIBArray.push(nonAdminIB[prop]);
  }
}

然后用nonAdminIBArray敲除。

foreach绑定希望绑定到的对象是一个数组(可观察对象或其他),而不是JSON对象。如此:

var vm = {
    nonAdminIB: [{
        "nonAdminIrregularBehaviorId": 383,
            "irregularBehaviorId": 5,
            "irregularBehaviorDescription": "Falsified Information",
            "explanation": "Falsification of information on applications/scheduling permits."
    }, {
        "nonAdminIrregularBehaviorId": 384,
            "irregularBehaviorId": 6,
            "irregularBehaviorDescription": "Falsified Score",
            "explanation": "Falsification of score information. "
    }]
};
ko.applyBindings(vm);

所以如果你可以遍历JSON对象并将其转换为数组,这将为你工作。我想说的是,如果你要迭代它它可能值得你把这个数组,然后加载到一个可观察数组,当你在它允许你改变它的客户端,享受knockout绑定的好处。

至于为什么显式调用nonadminab [x]是工作的,这将是因为您的JSON对象的命名。引号中的数字使您可以访问对象,就像它是一个带有方括号符号的数组一样,尽管实际上该对象根本不是数组。