嗨(模型的instanceof模型),Backbone.js的通过Chrome扩展
这是我第一次张贴在这个网站,我要提出的问题是困难的,因为阐明该组变量需要达到它。让我快速解释我正在使用的框架。
我使用jQuery,jQuery的UI,和骨干
整个JS套件扩展是写在CoffeeScript中,我使用Rails和资产管道来管理其全部建立一个Chrome扩展。这意味着当我想部署我的扩展代码时,我运行rake assets:precompile
并将生成的压缩JS复制到我的扩展目录。
这种方法的好处是我可以通过包含库来实际运行Rails应用程序中的扩展js。这与我的扩展background.js文件基本相同,后者将js注入为内容脚本。
无论如何,我最近遇到的问题是,当我尝试在我的好友的网站whiskeynotes.com上测试我的扩展。
我注意到的是,我的主干模型在将它们添加到它们各自的集合中时正在被损坏。因此,像
this.collection.add(new SomeModel)
创建了模型的一些废话版本。
该代码最终运行到骨干prepareModel代码现在
_prepareModel: function(model, options) {
options || (options = {});
if (!(model instanceof Model)) {
var attrs = model;
options.collection = this;
model = new this.model(attrs, options);
if (!model._validate(model.attributes, options)) model = false;
} else if (!model.collection) {
model.collection = this;
}
return model;
},
,在大多数关于这一点我已经测试了扩展的站点,结果是正常的,但是在我的好友的网站!(model instance Model)
计算结果为真尽管它实际上是正确类的一个实例。结果是模型的超级混乱版本,其中模型的属性是对模型集合的引用(奇怪的权利?)。不用说,各种疯狂的事情发生在后面。
为什么这发生在我身上。然而改变这条线(!(model instanceof Model))
到(!(model instanceof Backbone.Model))
似乎解决了这个问题。我想也许它与Flot库(jQuery图库)有关,它们创建了它们自己的'Model'版本,但是通过源代码查看并没有发现它的任何实例。我只是好奇为什么这会发生。将这个小改动添加到骨干源是否有意义?
更新:
我刚刚意识到 “修复” 实际上并没有正常工作。我还可以补充一点,我的骨架模型在一个包装对象命名空间,这样的声明看起来像class SomeNamespace.SomeModel extends Backbone.Model