首页 > Backbone POST 新增数据,怎么处理id使之持久化?

Backbone POST 新增数据,怎么处理id使之持久化?

先说点铺垫
都知道Backbonemodel实例持久化与否,是要看是否存在id属性的。
fetch回的数据是一定要带着id的,以表此对象已相对后台持久化(当然,id可以在parse中自行处理,这不是重点)
那比如我新实例化一个model,填充了数据之后save了一下,当然也就发起了一个POST请求去新增数据,这里现在是没有id的,那么新增成功返回的数据肯定也是要带着新增后生成的id的,现在的问题是,返回的数据格式应该是怎样的?单纯的{id: 'xxx'}是不是就可以让Backbone自行维护这个model实例了?


后台哥们儿不在,现在不方便测试,所以特来向各位GOD证实一下我的猜测。网上压根没搜到。XD


直接返回id就可以了


我们 post 上的数据大概这样子的,会创建 id

然后后台返回的数据大概这样子


我天。。竟然没有个知道的??

既然没有知道的,我就把我暂时想到的解决方案PO上来吧。

假设那个打算请求后台新建Backbone.Model实例叫做model
经过对这个model一顿set操作之后(当然,也可以放到save的第一个参数中),这时候我要save
model.save第二个参数option兼容jQueryajax的那些参数,比如successerror还有complete之类的,当然,其中还有一个dataFilter(详见jQuery文档)

在这个dataFilter预先处理服务器响应的数据,记得return JSON格式的字符串数据,只需要包含id就可以了,e.g.: '{"id":"xxx"}'(刚刚测试来着,后来忘了是不是一定要严格遵循标准JSON格式了,即属性和值都是双引号

但是这里有点需要注意的是:

  1. Backbonesuccess又封装了一层,success的第一个参数并不是服务器响应的数据原型,而是经过处理的Model实例(所以我选择在success之前执行的dataFilter中处理数据);

  2. 就算是这样处理了,让Backbone自行维护了这个Model实例,但model.hasChanged()依然是truemodel.changedAttributes()会显示{id: 'xxx'}。我的做法是,强行把这个状态重置掉:model.changed = {};。然后model.hasChanged()就是false了。

当然如果有更好的答案,欢迎补充。

【热门文章】
【热门文章】