javascript - knockout 计算可观察量上的 Foreach 绑定(bind)

标签 javascript knockout.js knockout-3.0

我有一个 observableArray,scheduleDays,如下所示。它代表选定模拟器游戏的 1 周预约。

enter image description here

如果用户选择查看2个模拟器时间表,则返回的 View 模型如下所示:

enter image description here

this.scheduleDays = ko.observableArray([
  new ScheduleDay(1, 'Sunday', '02/09/2020', 1111, []),
  new ScheduleDay(4, 'Sunday', '02/09/2020', 2222, []),
  new ScheduleDay(2, 'Monday', '02/10/2020', 1111, []),
  new ScheduleDay(5, 'Monday', '02/10/2020', 2222, []),
  new ScheduleDay(3, 'Tuesday', '02/10/2020', 1111, []),
  new ScheduleDay(6, 'Tuesday', '02/10/2020', 2222, [])
]);

这会导致 UI 显示如下结果:

enter image description here

但我想要的是数据按模拟器排序,然后按日期排序,如下所示:

enter image description here

显而易见的解决方案是对其进行排序,但出于学习目的,我想尝试通过模拟器对 View 模型进行分组来解决它。所以我添加了这个:

this.groupedScheduleDays = ko.computed(function() {
var result = {};
var original = self.scheduleDays();
console.log(original);

for (var i = 0; i < original.length; i++) {
  var item = original[i];
  result[item.simulatorId] = result[item.simulatorId] || [];
  result[item.simulatorId].push(item);
}

return result;
});

这就产生了这个:

enter image description here

这就是我所期待的。这是我迄今为止想到的https://jsfiddle.net/krob636/o48unhsg/58/ 。我的问题是如何在 foreach 中绑定(bind) groupedScheduleDays

最佳答案

您可以使用Object.keys来获取分组的项目,并使用嵌套的foreach:

<div data-bind="foreach: Object.keys(groupedScheduleDays())">
  <div data-bind="foreach: $parent.groupedScheduleDays()[$data]">
    <div class="row">
      <div class="col-2">
        <span data-bind="text: dayOfWeekName"></span>
      </div>
      <div class="col-2">
        <span data-bind="text: simulatorId"></span>
      </div>
    </div>
  </div>
</div>

fiddle :https://jsfiddle.net/thebluenile/L82emswo/

此外,请记住,您的日期属性是可观察的,因此: result[item.simulatorId] 不起作用,或者更确切地说,不会达到预期的效果;由于可观察量在技术上是函数,因此实际函数将用作 key 。您需要解开可观察对象:result[item.simulatorId()]

关于javascript - knockout 计算可观察量上的 Foreach 绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60234454/

相关文章:

javascript - 在 while 循环中显示/隐藏函数

javascript - IE Explorer 9 直到 ajax/json 函数完成后才呈现

javascript - 从 react-router 哈希片段中获取查询参数

javascript - 在 knockout.js 中为 nl2br 创建自定义绑定(bind)

knockout.js - 甲骨文JET : Knockout not updating variable

javascript - Bootstrap 导航栏不切换

knockout.js - 为什么在 knockout.js 示例中,viewmodel 有时被定义为一个函数,有时又被定义为一个直接变量定义?

knockout.js - 对复杂的 knockout View 模型/模型的建议?

javascript - Knockout.js - 尝试将 JSON 添加到 View 模型未定义

knockout.js - 您可以在自定义绑定(bind)中设置现有的 Knockout 绑定(bind)吗?