我有一个 plnk 可以证明我的问题:http://plnkr.co/edit/bXINbDBIMb0LbLitHGbl。
有一个任务列表,每个任务可以包含一个任务列表。任务只能是顶级或具有单亲,并且任务不能包含自身。
当我使用 foreach 绑定时,任务被“保存”到正确的任务并按预期工作。(除了可脚的功能)(保存在引号中,因为任务除了被推送到可观察数组之外并没有真正保存。)
根据这个答案:https : //stackoverflow.com/a/20811414/2033294 我创建了一个自定义的Footable绑定。在我尝试使用嵌套任务之前,绑定完全按照我的意愿工作。
要查看我想要的行为,请按“添加任务”,按“确定”,单击刚刚创建的任务并添加另一个任务或子任务。按“确定”,再次单击任务,看到子任务已按预期保存。
要查看问题,请更改
<tbody data-bind="foreach: items, delegatedHandler: 'click'">
至
<tbody data-bind="footable: items, delegatedHandler: 'click'">
重复上述步骤。您会看到子任务没有像您期望的那样“保存”。如果您按下“应用”,然后添加子任务,它会显示为有效,直到您将“确定”推回主列表,然后再次查看任务。您会看到子任务并没有真正推送到正确的数组。
编辑:我已将问题缩小到触发 footable_redraw 的位置。当我禁用它时,数据会按预期显示。脚注不会重绘,但至少知道我知道问题不在于底层数据或视图模型。
编辑:我已经将问题追溯到footable.js中的这段代码:(第615行)
if (data.hide[breakpointName] === false) $column.show();
else $column.hide();
所以,由于某种原因,这些列被设置为隐藏,我只是不确定如何设置它们以便它们不被隐藏。
编辑:我发现如果我这样做:(在footableBinding.js中)
footable.reset();
footable.init();
代替:
footable.redraw();
这给出了我期望的行为,但这似乎不是解决问题的正确方法。