与铆钉和骨干的双向绑定非常棒。当用户在表单中引入更改时,您的Model实例会更新,然后您只需在其上发出save()
即可。
问题是有时候Model Model实例会显示在其他地方,并且您不希望在服务器端成功处理(或不成功)save()
操作之前注意到更改。换句话说,有时需要延迟将更改从DOM发布到Model实例。
我们想到的最佳解决方案是将Rivets绑定到Model实例本身,而不是绑定到它的普通对象表示(通过model.toJSON()
)。然后,铆钉发布对该普通对象的更改,您只需将其作为'attributes'参数传递给model.save()
。
您是否找到了更好的解决方案/模式/练习?提前致谢
答案 0 :(得分:1)
我本身没有使用铆钉,但是这种问题的一个解决方案是使用“脏模型”,即传递给铆钉的原始模型的副本,然后当您准备保存它时您将其属性保存到原始模型。所以:
var dirtyModel = new Backbone.Model( originalModel.toJSON() );
然后你把那个模型传给铆钉或者你正在使用的其他任何东西,然后你就可以保存它了:
originalModel.save( dirtyModel.toJSON() );
这样,当你不想要它时,你就逃脱了双向绑定的陷阱......