1

我正在尝试使用映射插件在 knockoutjs 视图模型中插入和更新数据。
初始数据如下所示(数字映射在“id”字段中,文本映射在“name”字段中):

  • 1 个
    • 2 二
      • 3 三
      • 4 四
    • 5 五
      • 6 六
      • 7 七
  • 8 八
    • 9 九
      • 10 十
      • 11 十一
    • 12 十二
      • 13 十三
      • 14 十四
  • 15 十五

我得到的是

  • 1个MOD
    • 2 二
      • 3 三
      • 4 四
  • 16 十六

我想得到的是:

  • 1个MOD
    • 2 二
      • 3 三
      • 4 四
  • 8 八
    • 9 九
      • 10 十
      • 11 十一
    • 12 十二
      • 13 十三
      • 14 十四
  • 15 十五
  • 16 十六

换句话说:

  • 将字段“name”中的元素 1 从“one”更新为“oneMOD”(因为字段 id 被映射为键)
  • 5 及其子删除(或未触及)
  • 8和15不变
  • 增加了 16 个。

看起来 ko.mapping.fromJS 替换了新数据而不是更新它们。
我肯定错过了一些东西。

你可以在这里找到代码:http: //jsbin.com/uwihoz/2/edit

蒂亚
·詹尼

编辑

好的,我误解了使用 ko.mapping.fromJS 进行“更新”的目的。
如果要更新模型,则必须发送包含更新的完整原始数据集。
如果你想要部分更新,你必须实现它。
我要测试KnockoutJS-Mapping-updateData

这篇文章(knockoutjs-using-updatefromjs-replacing-values-when-it-should-be-adding)证实了我的怀疑。

我希望这会有所帮助。

再见,
詹尼

4

1 回答 1

0

在您最初的问题中, ko.mapping 通过创建一个新的视图模型来工作。因此,当您第二次进行映射时,您将替换以前的视图模型。更新基本上做同样的事情。

您要求映射做的是了解您的数据并自动更新现有记录并添加新记录。它不是那么聪明。您将不得不编写代码来读取更新结果并在原始视图模型中更新/添加正确的记录。

于 2012-10-17T10:51:34.850 回答