使用knockoutjs + mapping插件更新数据(+解决方案)

时间:2012-10-16 15:07:45

标签: knockout.js knockout-mapping-plugin

我正在尝试使用映射插件在knockoutjs viewmodel中插入和更新数据 初始数据看起来像(数字映射在“id”字段和“name”字段中的文本):

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

我得到的是

  • 1 oneMOD
    • 2两个
      • 3三
      • 4 four
  • 16十六岁

我想得到的是:

  • 1 oneMOD
    • 2两个
      • 3三
      • 4 four
  • 8八
    • 9九
      • 10十
      • 11十一
    • 12 12
      • 13十三
      • 14十四
  • 15十五
  • 16十六岁
换句话说,

  • 对字段“name”中的元素1的更新,从“one”到“oneMOD” (因为字段id被映射为键)
  • 5及其儿子被删除(或未被触及)
  • 8和15未触动
  • 16补充说。

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

您可以在此处找到代码:http://jsbin.com/uwihoz/2/edit

TIA
  詹尼

修改

好吧,我误解了使用ko.mapping.fromJS打算“更新”的内容 如果要更新模型,则必须发送包含更新的完整原始数据集 如果您想进行部分更新,则必须执行此操作 我要去测试KnockoutJS-Mapping-updateData

post(knockoutjs-using-updatefromjs-replacement-values-when-it-should-to-adding)让我对我的怀疑有了确认。

我希望这会有所帮助。

再见,
詹尼

1 个答案:

答案 0 :(得分:0)

在您的原始问题中,ko.mapping的工作原理是创建一个新的视图模型。因此,当您第二次进行映射时,您将替换以前的视图模型。更新基本上是一样的。

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