javascript - Backbone.Collection 保存后元素过多

标签 javascript backbone.js marionette backbone-relational

我将 Backbone 与 Marionette 和 backbone-relational 结合使用。

假设我有一个动物园,里面有 Backbone.Collection 动物。 我在数据库中存储了一只动物(id 为 1)。 现在我将第二只动物添加到 Backbone.Collection 并调用 zoo.save({}, {wait: true})。 作为响应,我的后端服务器返回了两只动物(旧的 id 为 1 的,新的 id 为 2 的)。 行得通。

问题:保存后 Backbone.Collection 包含三个模型

  1. id 为 1 的动物
  2. 没有 id 的动物(只有 cid)
  3. 服务器返回的 id 为 2 的新动物

相反,我只想要两个模型:

  1. id 为 1 的动物
  2. id 为 2 的动物

我如何告诉 Backbone 将服务器 ID 设置为已经存在的动物,而不是向集合中添加新模型?

附加信息:

我的 Zoo 模型扩展了 Backbone.RelationalModel,关系定义如下(类似于 http://backbonerelational.org/#RelationalModel-relations 中的示例):

relations: [
    type:           Backbone.HasMany
    relatedModel:   'Animal'
    collectionType: 'AnimalCollection'
    key:            'animals'
]

这就是为什么保存动物园也会更新收藏。

最佳答案

我通常通过 Ajax 发布我的新模型(因为在客户端创建的模型在服务器端创建之前没有任何服务器数据支持),并在我的 Ajax 函数的成功回调中添加从返回的模型 JSON服务器到集合,从而确保您的数据由后端驱动,并且您在客户端没有挂起的数据/模型,这些数据/模型在重新加载时将不再存在。

关于javascript - Backbone.Collection 保存后元素过多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31167842/

相关文章:

javascript - 不确定如何引用 `slideDown,js` 操作的对象?

javascript - Backbone.js 路由和滚动位置

javascript - 再次在 Backbone 僵尸 View

javascript - jQuery 表单提交未提交表单

javascript - Safari 中 jQuery val() 的意外行为

javascript - 从网站访问动态数据

javascript - 为拖放界面选择 Javascript MVC 框架

javascript - 在 Marionette.js 中调用父 View 的函数

javascript - 在 sails js 中处理事件

backbone.js - 面向对象模型和backbone.js