如何在 Backbone.js 中加载具有外键关系的子模型?

2024-04-16

抱歉,如果这有点复杂...我仍在学习 Backbone.js...

加载和保存内部具有子模型的 Backbone 模型的正确方法是什么? (我什至应该有子模型吗?)

例如,(请原谅咖啡脚本),如果我有类似的东西:

class Address extends Backbone.Model
  urlRoot: '/api/v1/address/'
  url: -> return @urlRoot+@id+'/?format=json'
  defaults: {'city': '', 'state': ''}

class Person extends Backbone.Model
  urlRoot: '/api/v1/person/'
  url: -> return @urlRoot+@id+'/?format=json'
  defaults: { name: 'Anon', address: new Address }

... and then I do this ...

dude = new Person
dude.set('id',101)
dude.fetch()
// Response returns {name: 'The Dude', address: '/api/v1/address/1998/'}
// And now, dude.get('address') is '/api/v1/address/1998' and no Address object

where = new Address
where.set('id',1998)
where.fetch()
// Response returns {city: 'Venice', state; 'CA'}

我想要的是就是说 dude.fetch() 并让它获取这家伙和他的地址,当我调用 Backbone.sync('update',dude) 时,我想保存这家伙和他的地址。如何?

在后端,我使用 tastypie 为一些 SQLAlchemy 表(不是 Django 的 ORM)构建 api,因此我有一个用于 Person 表和 Address 表的资源:

class AddressResource(SQLAlchemyResource):
    class Meta:
        resource_name = 'address'
        object_class = AddressSQLAlchemyORMClass

class PersonResource(SQLAlchemyResource):
    address = ForeignKey(AddressResource, 'address')
    class Meta:
        resource_name = 'person'
        object_class = PersonSQLAlchemyORMClass

美味派的外键 http://django-tastypie.readthedocs.org/en/latest/interacting.html函数创建一个返回的映射the URL到有问题的地址。

我尝试重载 Dude.parse() 函数来调用 Address() 的 fetch,但它不起作用,而且感觉不对,并且引发了各种问题:

  1. 我是否应该修改我的 tastypie 响应以将地址包含为嵌套对象?
  2. 如果我更改为嵌套对象,我应该使用骨干关系型 https://github.com/PaulUithol/Backbone-relational/,如问题中所示未创建骨干关系相关模型 https://stackoverflow.com/questions/11316782/backbone-relational-related-models-not-being-created,或者这太过分了?
  3. 我可以做重载 parse() http://paltman.com/2012/04/30/integration-backbonejs-tastypie/或 fetch() 函数或创建我自己的backbone.Sync() 来获取响应,然后手动执行此操作?
  4. 既然它是一对一的,我是否应该只使用一个模型而不是子模型,并在一个请求中将信息一起发送回来?

有这样做的标准方法吗?


使用 Tastypie,您可以通过指定将响应更改为嵌套对象,而不是链接完整=真在外键定义中:

class PersonResource(SQLAlchemyResource):
    address = ForeignKey(AddressResource, 'address', full=True)

这将返回地址对象和人员。

接下来我还是不知道如果这是最好的方法,但我将子模型移出了属性,并重载了 parse() 来设置它,并重载 update() 来保存它,例如:

class Person extends Backbone.Model
  address: new Address
  urlRoot: '/api/v1/person/'
  url: -> return @urlRoot+@id+'/?format=json'
  defaults: { name: 'Anon'}

  parse: (response) ->
     addressResp = response.address || {}
     addressAttr = @address.parse(addressResp)
     @address.set(addressAttr)
     return response

  update: (options) ->
     @set('address',@address.toJSON())
     Backbone.sync 'update', @, options

在此示例中,我可以将地址添加回属性并使用 set/get 进行管理,但随后在我自己的环境中,我为 json 创建了一个备用 toJSON 函数以发布到服务器,但找不到将 json 设置为对象而不将其从集合更改为 json 响应的好方法。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Backbone.js 中加载具有外键关系的子模型? 的相关文章

随机推荐

  • 是否有任何正式的方法或已知的方法来规范化 xml 文件以生成差异?

    似乎有很多关于 WRT 工具在 xml 之间生成差异的问题 但还没有这个问题 所以任何知道这个问题的人都会向我展示一个链接或粘贴任何人已经解决了这个问题的示例 规范化 xml 文件意味着 重新排序属性的外观 重新排序标签的外观 可通过命令行
  • 使用内部联接编写用 SQL 编写的继承查询?

    我承认我的 SQL 知识 使用 mySQL 几乎没有超出数据库管理所需的标准查询 并且我的大部分数据操作都是通过 php 完成的 我一直渴望改变这一点 并且到目前为止已经取得了成功 如果有人能建议我如何在包含 父 子 字段 内部字段的标准表
  • Xamarin Studio 中的目标平台被禁用?

    When creating a new project the target platform Android is already greyed out so can t proceed 我已经链接了SDK和NDK 如果您未安装 Xama
  • 这段 Python 代码是否容易受到 SQL 注入攻击? (SQLite3)

    正如标题所示 我想知道这段代码是否容易受到 SQL 注入攻击 如果是这样 是否有更好 更安全的方法来实现同样的目标 def add table args statement INSERT INTO s VALUES s table args
  • 在 CodeIgniter 中使用模型

    有人可以向我解释什么时候在 CI 中使用模型是一个好的实践吗 维基百科上的一篇文章将 CI 模型称为 完全可选且很少需要 这是真的吗 假设您需要调用一个名为get user info从数据库检索用户信息 你可以有这样的函数 class Ho
  • 为什么 std::bitset<8> 变量无法处理 11111111?

    为什么这个程序显示以下输出 include
  • Swift:MKAnnotation 长标题文本

    我有很长的 MKannotationView 标题文本 有没有一种简单的方法可以使标题中的文本大小合适 reuseId Pin var pinView mapView dequeueReusableAnnotationViewWithIde
  • 如何在滚动更改事件上获取android滚动视图的第一个可见子项

    我想在每个滚动更改事件上从 android 滚动视图获取第一个可见的子视图 就像 当我们向下滚动时 我们会得到所有即将在屏幕上可见的视图 ID 或引用 如何 我自己得到了它 这是我的代码 在这里 我们需要创建自定义回调监听器 在其 onSc
  • 如何更改列的 CSS - ReactTable

    我在用反应表 https www npmjs com package react table installation在我的应用程序中 我坚持做一件事 即改变CSS of columns当调整列大小时 目前当你resize仅一列cursor
  • Android 5.0(Lollipop)小部件按钮的文本全部大写[重复]

    这个问题在这里已经有答案了 我有一个简单的主屏幕小部件 上面有几个按钮 我的问题是 当小部件在 Lollipop 上运行时 按钮的文本全部大写 任何以前的 Android 版本都没有这个问题 layout xml 中的按钮是非常普通的按钮
  • 在 Swift 中捕获 NSException

    Swift 中的以下代码引发 NSInvalidArgumentException 异常 task NSTask task launchPath SomeWrongPath task launch 我怎样才能捕获异常 据我了解 Swift
  • 为什么此 SQL 存储过程需要创建临时表才能工作(返回结果)?

    IBM Informix 动态服务器版本 11 50 FC6 我正在开发一个小型存储过程 该过程将从表中获取名称字段并将它们解析为最多 8 个字符的 用户名 这是我正在尝试的代码 CREATE PROCEDURE build jics us
  • Android TCP 连接最佳实践

    我正在开发一个需要 TCP 连接到 TCP 服务器的 Android 应用程序 用 Node js 编写 我的 Android TCP 客户端正在工作 可以来回发送消息 我的具体问题是 在 Android 中处理与服务器的 TCP 连接的最
  • 如何在单元格 Swift 2 中删除项目后重新加载表格视图

    我有一个帐户列表TableView 按下按钮后 项目将被删除 到目前为止 一切都很好 删除后如何刷新tableView 请查看下面的屏幕截图以获取更多信息 TableView在另一个ViewController中 要删除的按钮在ViewCo
  • 删除数组中第一级标识符[重复]

    这个问题在这里已经有答案了 我认为这个问题以前已经出现过 但找不到任何答案 如果已经回答 请通过链接为我指出正确的方向 我有一个数组 我不想删除第一级标识符 我想有一个函数可以实现这个功能吗 它是如何的示例 0 gt Array 8 gt
  • 如何从数字列表中获取字符串?

    我有一个 Erlang 符号列表 104 105 106 107 如何从此列表中获取字符串 hijk Erlang 中不存在字符串这种数据类型 Stings 只是字符列表 104 105 106 107 and hijk 是完全等价的 事实
  • Facebook SDK:应用程序未注册为 URL 方案

    我正在使用Facebook SDK found here http components xamarin com view facebookios 并且正在尝试提供的示例 在文件夹中FacebookiOSSample 如果我简单地替换App
  • 如何检查一个类没有参数构造函数

    Object obj new Object try obj getClass getConstructor catch SecurityException e e printStackTrace catch NoSuchMethodExce
  • 重新创建一棵扁平的树

    我有一个地图向量 我想以嵌套方式对其进行转换 数据结构如下 def data id 1 name a parent 0 id 2 name b parent 0 id 3 name c parent 0 id 4 name a 1 pare
  • 如何在 Backbone.js 中加载具有外键关系的子模型?

    抱歉 如果这有点复杂 我仍在学习 Backbone js 加载和保存内部具有子模型的 Backbone 模型的正确方法是什么 我什至应该有子模型吗 例如 请原谅咖啡脚本 如果我有类似的东西 class Address extends Bac