Backbone Model对象在获取期间具有未定义的原型属性

时间:2015-06-07 08:27:14

标签: javascript backbone.js prototype

我正在尝试定义Backbone集合,然后使用Backbone.fetch从API中提取数据。但是当我对集合运行fetch时,我最终得到了这个错误:

Error

当我进一步检查控制台中的问题时,我发现当Backbone试图确定模型的唯一密钥时Backbone.create函数内的错误。由于某种原因,模型的prototype属性未定义:

Undefined prototype property

......即使模型本身已定义:

Model itself is defined

我有点难过,为什么prototype属性未定义。我在这个问题上发现了类似的post,但产生错误的情况似乎有所不同。

令我感到特别奇怪的是,在控制台中我能够找到代码所需的idAttribute属性,并且它实际上嵌套了两层,以便它可以通过{{1}到达因为this.model.__proto__.__proto__.idAttribute指向this.model.__proto__.__proto__

enter image description here

毋庸置疑,我在这里有点困惑,不知道Backbone的内脏。如果有人能够对这里可能出现的问题有所了解,那就太棒了。我的Backbone模型和集合定义在这里:

Backbone.Model

1 个答案:

答案 0 :(得分:0)

在对Javascript对象和原型的本质进行一些额外的思考后,我发现了这个问题。这就是我理解的方式,虽然我可能有点偏僻。

基本上,在Javascript中,可以在prototype个对象上访问constructor属性。根据{{​​3}} a的构造函数对象是:

  

[f]创建和初始化对象的联合对象。

在Backbone中,Model是一个构造函数对象,因此抛出错误的代码会尝试调用this.prototype(即constuctor.prototype)。但是,在我的代码中,我实际上将该构造函数对象创建的新对象分配给了模型名称:

var Recommendation = **new** (Backbone.Model.extend({

    defaults: {
        id: '',
        rating: 0
    };

}));

因此,在这种情况下,分配给我的变量Recommendation的对象实际上不是构造函数,因此没有prototype属性。因此错误。为了解决这个问题,我只是将构造函数分配给Recommendation,如下所示:

var Recommendation = Backbone.Model.extend({

    defaults: {
        id: '',
        rating: 0
    };

});