先说点铺垫
都知道Backbone
的model
实例持久化与否,是要看是否存在id
属性的。fetch
回的数据是一定要带着id
的,以表此对象已相对后台持久化(当然,id
可以在parse
中自行处理,这不是重点)
那比如我新实例化一个model
,填充了数据之后save
了一下,当然也就发起了一个POST
请求去新增数据,这里现在是没有id
的,那么新增成功返回的数据肯定也是要带着新增后生成的id
的,现在的问题是,返回的数据格式应该是怎样的?单纯的{id: 'xxx'}
是不是就可以让Backbone
自行维护这个model
实例了?
后台哥们儿不在,现在不方便测试,所以特来向各位GOD证实一下我的猜测。网上压根没搜到。XD
Copyright 2014-2024 //m.sbmmt.com/ All Rights Reserved | php.cn | 湘ICP备2023035733号
我天。。竟然没有个知道的??既然没有知道的,我就把我暂时想到的解决方案
PO
上来吧。假设那个打算请求后台
新建
的Backbone.Model
实例叫做model
经过对这个
model
一顿set
操作之后(当然,也可以放到save
的第一个参数中),这时候我要save
了model.save
第二个参数option
兼容jQuery
的ajax
的那些参数,比如success
、error
还有complete
之类的,当然,其中还有一个dataFilter
(详见jQuery
文档)在这个
dataFilter
预先处理服务器响应的数据,记得return
JSON
格式的字符串数据,只需要包含id
就可以了,e.g.:
'{"id":"xxx"}'
(刚刚测试来着,后来忘了是不是一定要严格遵循标准JSON
格式了,即属性和值都是双引号
)但是这里有
两
点需要注意的是:Backbone
将success
又封装了一层,success
的第一个参数并不是服务器响应的数据原型
,而是经过处理的Model
实例(所以我选择在success
之前执行的dataFilter
中处理数据);就算是这样处理了,让
Backbone
自行维护了这个Model
实例,但model.hasChanged()
依然是true
,model.changedAttributes()
会显示{id: 'xxx'}
。我的做法是,强行把这个状态重置掉:model.changed = {};
。然后model.hasChanged()
就是false
了。当然如果有更好的答案,欢迎补充。
我们 post 上的数据大概这样子的,会创建 id
然后后台返回的数据大概这样子
直接返回id就可以了