如何在使用KnockoutJs时有效地持久创建/更新/删除数据?

时间:2011-10-26 15:20:11

标签: knockout.js

我一直在玩knockoutjs,到目前为止,我在视图中列出了一系列项目。

我可以使用各种按钮更新,创建和删除它们。

我也有能力保存,当发生这种情况时,我的viewmodel会以json的形式发送到服务器,并在那里处理它。

我担心此时效率会稍低。

我目前有一个foreach循环,可以查看每个项目。

然后我一次查询每个项目1,如果它不存在我认为它是新的并添加它,如果它有_destroy = true,我删除它,最后如果它确实存在我只需用它取代它从服务器发回,这是持久更新的地方。

这对我来说似乎很浪费。

1)我从视图中发回每一行。

2)然后,即使没有任何变化,我也会在到达服务器时检索每一行。

是否有办法标记“注意”行,只将这些行发送回服务器。

例如,假设我的视图中有4行显示。 我向viewmodel添加一个新的,编辑现有的一个并删除另一个。

我只想将这3行发送回服务器...忽略那些未更改的行。

也许我可以添加并检查类似于_destroy当前工作方式的特定标志?

因此添加项目会添加_create标志,编辑会添加_update标志等。

抱歉,我希望这看起来不像华夫饼干。

你会如何建议处理这个?

谢谢,Kohan。

1 个答案:

答案 0 :(得分:2)

以下是可能有用的示例:http://jsfiddle.net/rniemeyer/gfkej/

它基于:http://www.knockmeout.net/2011/05/creating-smart-dirty-flag-in-knockoutjs.html

基本思想是为每个项添加一个脏标志,然后创建一个代表所有脏项的dependentObservable。过滤脏项时,还会检查是否在项上设置了_destroy。添加新项时,脏标志允许您传入布尔值以指示它应立即被视为脏。在我的示例中,我只是传递id === 0,因为我正在将id初始化为0以获取任何新项目。