Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/459.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 作业后为空的RelationalModel关系字段';结束了_Javascript_Backbone.js_Model View Controller_Backbone Relational_Relational Model - Fatal编程技术网

Javascript 作业后为空的RelationalModel关系字段';结束了

Javascript 作业后为空的RelationalModel关系字段';结束了,javascript,backbone.js,model-view-controller,backbone-relational,relational-model,Javascript,Backbone.js,Model View Controller,Backbone Relational,Relational Model,我有一个wtf的问题,我无法解决。我解释: 我有一个名为Product的模型: var Product = Backbone.RelationalModel.extend( { urlRoot: Backbone.rootApiUrl + '/products', defaults: { id: '', name: '', description: '', current_price: '', cat

我有一个wtf的问题,我无法解决。我解释:

我有一个名为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\u id
是一个用户的外键(也是主干网中的一个型号):

我的fetch关系在每个单独的模型中都能完美地工作。但是当我在
Product.user\id
和我的用户模型之间建立关系时,就会出现wtf错误

我已经尝试了一切可能的方法:所有的键(
keySource
keyDestination
…..,以及所有可能的值)。我甚至在关系库中设置了断点,以便能够观察发生了什么。。。没什么好说的。即使StackOverflow也不知道这个bug:P(或者我搜索得不好)

最后一个问题是:

  • 我的产品通过API正确发送,并设置为主干(OK)
  • 字段
    user\u id
    首先由产品API响应设置为一个数字,然后由Relational设置为NULL,而不是由对象用户替换(为什么?)
  • 当我观看我的网络调试器时,使用
    User\u id
    number(OK)调用用户对象的API。服务器响应良好,正确的用户使用JSON(OK)。但是Relational不会将此响应对象与字段
    user\u id
    绑定,该字段现在是。。。。空(不正常)。
    • 因此,我丢失了一个用户对象(但如果我在自动获取中放置了一个success函数,我可以console.log()将其删除),该对象没有正确链接到其父产品的
      User\u id
编辑:这里有一个JSFIDLE可用(注意,API可能需要很长时间才能响应,大约10秒,这是正常的)


提前感谢:/抱歉您为此花费的时间。

如果删除
用户id的默认值,它的行为是否会有所不同?我想知道它是否正在获取关系,然后应用默认值
null

您还可以尝试将
Backbone.Relational.showWarnings
设置为
true
,如果尚未设置,请检查控制台是否存在任何警告。

试一试:

    relations: [{
        type: Backbone.HasOne,
        key: 'id',
        keyDestination: 'user_id',
        includeInJSON: 'user_id',
        autoFetch: true,
        relatedModel: User
    }]

我无法理解主干关系文档的头绪。显然,
key
应该引用相关模型的id,但在他们的任何示例中似乎都没有这样做。我想知道他们的例子是否真的有效?无论如何,我认为这解决了您的问题:将
key
设置为相关模型中的键,并设置
keyDestination
includeInJSON
,这样它就知道如何将结果设置并序列化到产品对象中。

因此,如果您仔细查看主干关系文档,你会注意到他们给出的例子中没有一个是HasOne与HasMany的反向关系。因此,功能似乎未经测试(除您之外!)且无法运行。用另一种方式尝试这种关系:

var User = Backbone.RelationalModel.extend(
{

    urlRoot: 'http://noraj.fr:5000/users',
    defaults: {
        id: '',
        name: '',
        email: '',
        firstname: '',
        lastname: '',
        password: '',
        card_nb: '',
        cart_total: ''
    },

    relations: [{
        type: Backbone.HasMany,
        key: 'products',
        relatedModel: 'Product',
        reverseRelation: {
            key: 'id',
            keySource: 'user_id',
            keyDestination: 'user_id',
            includeInJSON: true
        }            
    }]            
});
// Product Model
var Product = Backbone.RelationalModel.extend(
{

    urlRoot: 'http://noraj.fr:5000/products',
    defaults: {
        id: '',
        name: '',
        description: '',
        current_price: '',
        categories: '',
        duration: '',
        shipping_cost: '',
        start_date: '',
        is_buy_it_now: '',
        user_id: null
    }        
});

我想我唯一的另一个问题是你在用什么API?我想你是在做购物车的事吧?这像shopify调用或其他产品API,还是您所指的主干API。jsHi:)谢谢您的回答。不,这是一个用Python自制的非常简单的API(带有flask)。实际上是为了学校的实习。API的响应很好:{用户名:“example”,密码:*******,邮件:“exemple@exemple.com" .... }. 服务器端没有做什么特别的事情,非常简单。您好:)警告已经启用,页面上没有警告。我从默认数组中删除了user\u id,但在抓取完成后,user\u id仍然为空。我真的不明白这个错误。。。API会很好地请求和发送显示用户。当
autoFetch
false
时,您是否看到相同的行为?完全相同。这意味着在获取用户后将字段设置为NULL的不是自动获取。我快发疯了xDHi!我在这里测试了这个:。在我的产品对象的全局JSON中,
user\u id
仍然是
null
。但是当我在做一个
pruduce.get('user\u id')
时,它会显示id。。。。。我不明白,是同一个物体!!无论如何,即使数字id是假的,因为Relational必须将整个对象
User
放在这个字段中,而不仅仅是id。我不明白,就像你说的,这是不对的…嗨。有件事我不明白。这种关系是相反的,我同意,但当我想向我的客户显示产品列表时,使用此代码,我必须询问用户而不是产品。这不是逻辑,是吗?如果我想显示产品列表,我应该调用
http://noraj.fr:5000/products
,而不是
/users
。或者我不明白这里的一些事情(可能是:P)。我在JSFiddle上测试了这个。事实上,当我调用
http://noraj.fr:5000/products
为了获得我的产品,不再调用
/users
API。
user\u id
是一个数字,但没有完成提取。
var User = Backbone.RelationalModel.extend(
{

    urlRoot: 'http://noraj.fr:5000/users',
    defaults: {
        id: '',
        name: '',
        email: '',
        firstname: '',
        lastname: '',
        password: '',
        card_nb: '',
        cart_total: ''
    },

    relations: [{
        type: Backbone.HasMany,
        key: 'products',
        relatedModel: 'Product',
        reverseRelation: {
            key: 'id',
            keySource: 'user_id',
            keyDestination: 'user_id',
            includeInJSON: true
        }            
    }]            
});
// Product Model
var Product = Backbone.RelationalModel.extend(
{

    urlRoot: 'http://noraj.fr:5000/products',
    defaults: {
        id: '',
        name: '',
        description: '',
        current_price: '',
        categories: '',
        duration: '',
        shipping_cost: '',
        start_date: '',
        is_buy_it_now: '',
        user_id: null
    }        
});