foreach 内淘汰 foreach

Posted

技术标签:

【中文标题】foreach 内淘汰 foreach【英文标题】:Knockout foreach within foreach 【发布时间】:2019-03-16 10:11:10 【问题描述】:

举个例子——

   <!--ko foreach: WorkItems-->
      <tbody data-bind="foreach: ActionPlans">
         // table data here
      </tbody>
   <!--/ko-->

我试图在“此处的表格数据”中仅显示属于当前迭代 WorkItem 的 ActionPlan 项。

问题 -

我的问题是当前“此处的表格数据”显示所有工作项的所有操作计划。

我的模型结构为 Person > WorkItem(array) > ActionPlan(array)

我试过了

   <!--ko foreach: WorkItems-->
      <tbody data-bind="foreach: $parent.ActionPlans">
         // table data here
      </tbody>
   <!--/ko-->

添加 $parent 不会显示任何行动计划...

------------- 按要求编辑 - --------

var PersonViewModel = function(data) 
var self = this;
ko.mapping.fromJS(data, trainingCourseItemMapping, self);

self.addWorkItem = function() 
    var WorkItem = new WorkItemVM(
        Id: null,
        JobSkillsAndExpDdl: "",
        JobSkillsAndExperience: "",
        ActionPlans: ko.observableArray(),
        PersonId: data.Id
        )
   self.WorkItems.push(WorkItem)
;

self.addActionPlan = function () 
    var actionPlan = new ActionPlanVM(
        Id: null,
        priorityAreaStage: "",
        goal: "",
        action: "",
        byWho: "",
        byWhen: ""
        WorkItemId: data.Id
    );
    self.ActionPlans.push(actionPlan);
;

数组映射

var trainingCourseItemMapping = 
'WorkItem': 
    key: function(workitem) 
        return ko.utils.unwrapObservable(workitem.Id);
    ,
    create: function(options) 
        return new WorkItemVM(options.data);
    ,
    'ActionPlans': 
        key: function (actionPlanItem) 
            return ko.utils.unwrapObservable(actionPlanItem.id);
        ,
        create: function (options) 
            return new ActionPlanVM(options.data);
        

    

数组项映射

var WorkItemVM = function(data) 
    var self = this;
    ko.mapping.fromJS(data, trainingCourseItemMapping, self);


var ActionPlanVM = function(data) 
    var self = this;
    ko.mapping.fromJS(data, , self);

编辑 2 ----------

这是渲染的 html,您可以看到它渲染了一个 foreach:ActionPlans for each WorkItem with an ActionPlan

【问题讨论】:

你能展示你的javascript代码吗? 谢谢,已添加 JS。 【参考方案1】:

我认为您不需要包含 $parent,因为它已经在 WorkItems binding context 中。

Fiddle

【讨论】:

非常感谢小提琴。我正在使用 ko.mapping 进行 VM 映射,所以我想知道这是否会妨碍您?

以上是关于foreach 内淘汰 foreach的主要内容,如果未能解决你的问题,请参考以下文章

淘汰赛 JS 选择初始值在 foreach 循环内未正确显示

淘汰赛无法处理绑定“foreach”

淘汰赛无法处理“foreach”的绑定

淘汰foreach绑定,更新值

淘汰赛foreach绑定不起作用

如何在淘汰赛 foreach 绑定中使用表单