javascript - Backbone POST 新增数据,怎么处理id使之持久化?
伊谢尔伦
伊谢尔伦 2017-04-10 17:04:58
[JavaScript讨论组]

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


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

伊谢尔伦
伊谢尔伦

小伙看你根骨奇佳,潜力无限,来学PHP伐。

全部回复(3)
PHP中文网

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

既然没有知道的,我就把我暂时想到的解决方案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了。

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

PHPz

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

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

怪我咯

直接返回id就可以了

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号