Backbone和Rivets:不要立即使用DOM中的值更新模型实例

时间:2014-02-27 15:53:49

标签: javascript backbone.js rivets.js

与铆钉和骨干的双向绑定非常棒。当用户在表单中引入更改时,您的Model实例会更新,然后您只需在其上发出save()即可。

问题是有时候Model Model实例会显示在其他地方,并且您不希望在服务器端成功处理(或不成功)save()操作之前注意到更改。换句话说,有时需要延迟将更改从DOM发布到Model实例。

我们想到的最佳解决方案是将Rivets绑定到Model实例本身,而不是绑定到它的普通对象表示(通过model.toJSON())。然后,铆钉发布对该普通对象的更改,您只需将其作为'attributes'参数传递给model.save()

您是否找到了更好的解决方案/模式/练习?提前致谢

1 个答案:

答案 0 :(得分:1)

我本身没有使用铆钉,但是这种问题的一个解决方案是使用“脏模型”,即传递给铆钉的原始模型的副本,然后当您准备保存它时您将其属性保存到原始模型。所以:

var dirtyModel = new Backbone.Model( originalModel.toJSON() );

然后你把那个模型传给铆钉或者你正在使用的其他任何东西,然后你就可以保存它了:

originalModel.save( dirtyModel.toJSON() );

这样,当你不想要它时,你就逃脱了双向绑定的陷阱......