我遇到了一个我想不通的问题。我解释道:
我有一个名为Product的模型:
var Product = Backbone.RelationalModel.extend(
{
urlRoot: Backbone.rootApiUrl + '/products',
defaults: {
id: '',
name: '',
description: '',
current_price: '',
categories: '',
duration: '',
shipping_cost: '',
start_date: '',
user_id: null,
is_buy_it_now: ''
},
relation: [{
type: Backbone.HasOne,
key: 'user_id',
relatedModel: User,
autoFetch: true
}]
});
我的字段user_id
是一个用户的外键(它也是 Backbone 网中的模型):
var User = Backbone.RelationalModel.extend(
{
urlRoot: Backbone.rootApiUrl + '/users',
defaults: {
id: '',
name: '',
email: '',
firstname: '',
lastname: '',
password: '',
card_nb: '',
cart_total: ''
}
});
我的fetch关系在每个单独的模型中都能很好地工作,但是当我在Product.user_id
和User模型之间放置一个关系时,出现了wtf错误。
我试过所有可能的方法:所有的键(keySource
,keyDestination
............所有可能的值)。我甚至在关系库中设置了断点,以便能够观察发生了什么......没什么好说的。甚至StackOverflow都不知道这个bug:P(或者我搜索得不好)
最后的问题是:
- 我的产品已由API正确发送并设置在 Backbone.js 中(正常)。
- 字段
user_id
首先由Product API响应设置为一个数字,然后由Relational设置为NULL,而不是由对象User替换(为什么?) - 当我观看我的网络调试器时,Relational使用
user_id
数字调用User对象的API(这里都是)(OK)。服务器响应很好,使用JSON格式的正确用户(OK)。但是Relational没有将这个响应对象与字段user_id
绑定,现在是.... NULL(NOT OK)。 - 因此,我丢失了一个User对象(但如果我在autoFetch中放置了一个success函数,我可以使用console.log()),没有正确链接到其带有字段
user_id
的父产品。
**EDIT:**此处提供了一个JSFiddle http://jsfiddle.net/gjdass/WNWrm/(请注意,API的响应时间可能会很长,大约10秒,这是正常的)。
提前感谢:/抱歉占用您的时间。
3条答案
按热度按时间j5fpnvbx1#
如果删除
user_id
的默认值,它的行为会有什么不同吗?我想知道它是否在获取关系,然后应用null
的默认值。如果尚未将
Backbone.Relational.showWarnings
设置为true
,您也可以尝试将其设置为true
,并检查控制台是否有任何警告。rseugnpd2#
给予看:
我无法理解 Backbone.js 关系文档。显然,
key
应该引用相关模型的id,但在他们的任何示例中似乎都没有这样做。我想知道他们的示例是否真的有效?无论如何,我认为这解决了您的问题:将key
设置为来自相关模型的键,并设置keyDestination
和includeInJSON
,以便它知道如何设置结果并将结果序列化到产品对象中。5t7ly7z53#
因此,如果仔细查看 Backbone.js 关系文档,您会注意到它们给予的示例中没有一个是HasOne,而其reverseRelation为HasMany。因此,似乎功能未经测试(除了您!),并且无法正常工作。请尝试另一种关系: