Knockout JS - Observable在添加到数组时变为未定义

时间:2017-10-24 06:27:01

标签: javascript knockout.js

我有一个名为purchase的对象,它根据其状态被放入两个可观察数组之一。 purchase对象有一个名为integrationStatus的可观察对象,我默认为css类名integration-status--complete

由于某种原因,预定阵列中的购买按预期编码为绿色,但未安排的阵列中的购买会因integrationStatus未定义而引发错误

提前致谢

JS Fiddle

1 个答案:

答案 0 :(得分:2)

该问题与Schedule中的映射配置有关。映射调用ko.mapping.fromJS(data, { scheduleDays : scheduleDayMapping }, self)指示实用程序仅自定义scheduleDays变量中data对象的映射。

由于该配置不包含unallocatedHolder的条目,因此映射实用程序使用默认的可观察创建行为而不是自定义行为。永远不会调用UnallocatedHolder函数,因此其purchases数组不会获得自定义映射。如果没有该映射,则不会为这些购买定义integrationStatus

我建议为Schedule定义一个新的映射配置,如下所示:

var scheduleMapping = {
  "scheduleDays": scheduleDayMapping,
  "unallocatedHolder": {
    create: function(options) {
      return new UnallocatedHolder(options.data);
    }
  }
};

然后,通过将映射行更新为

,在Schedule中引用此新映射配置
ko.mapping.fromJS(data, scheduleMapping, self);

Revised Fiddle