检查某些内容是否是主干 js 中的模型或集合
Check to see if something is a model or collection in backbone js
当你覆盖主干同步时,两个模型/集合.save()/fetch()都使用相同的主干同步方法,那么检查Backbone.sync接收的是模型还是模型集合的最佳方法是什么?
举个例子:
Backbone.sync = function(method, model, options){
//Model here can be both a collection or a single model so
if(model.isModel()) // there is no isModel or isCollection method
}
我想我正在寻找一种"安全"的最佳实践,我当然可以检查只有模型或集合才具有的某些属性或方法,但这似乎很黑客,不应该有更好的明显方法吗?可能我只是找不到它。
谢谢!
您也可以
尝试如下instanceof
:
Backbone.sync = function(method, model, options) {
if (model instanceof Backbone.Model) {
...
} else if (model instanceof Backbone.Collection) {
...
}
}
@fiskers7的答案适用于深度扩展:
var Item = Backbone.Model.extend({
className : 'Item',
size :10
});
var VerySmallItem = Item.extend({
size :0.1
});
var item = new Item();
var verySmall = new VerySmallItem();
alert("item is Model ?" + (item instanceof Backbone.Model)); //true
alert("verySmall is Model ?" + (verySmall instanceof Backbone.Model)); //true
这同样是黑客,但 Backbone 集合具有模型属性,而模型没有 - 它本身就是一个模型。
也许更安全的方法是 model.toJSON(),看看结果是对象还是数组。 无论如何,你可能会在你的自定义 Backbone.sync 中使用 model.toJSON(),所以尽管这在计算上非常昂贵,但它还是会发生。
我不完全确定我对此有何感受,因为它似乎有点黑客,但我无法确切地想到为什么它目前会非常糟糕。
绝对简单,比"实例"检查更快(我假设您不会在您的对象上命名任何其他函数"isBBModel/Collection"?
Backbone.Model.prototype.isBBCollection = function() { return false; }
Backbone.Model.prototype.isBBModel = function() { return true; }
Backbone.Collection.prototype.isBBCollection = function() { return true; }
Backbone.Collection.prototype.isBBModel = function() { return false; }
你可以做这样的事情。
Backbone.Model.prototype.getType = function() {
return "Model";
}
Backbone.Collection.prototype.getType = function() {
return "Collection";
}
if(model.getType() == "Model") {}
if(model.getType() == "Collection"){}
相关文章:
- 如何使用javascript访问sails.js模型中的属性
- 如何基于Knockout js模型设计控件样式
- 在Knockout.js模型中创建项之间的关系
- 使用OPTIONS而不是GET获取Backbone JS模型
- Ember.js-模型find()方法中的异步调用
- 将多级 mongodb 文档转换为 Backbone.js 模型/集合
- Jasmine找不到Backbone.js模型
- 将对象设置为Backbone.js模型,而不必调用“;set()"在每一处房产上
- Ember.js模型保存不向服务器发送数据
- 将表单复制到Backbone.js模型
- 如何将angular.js模型变量存储在javascript变量中
- 骨干.js模型中的几个问题
- 默认情况下,一个模型属性等于 sail.js 模型中的另一个模型属性
- 骨干 js 模型 保存不止一次
- 简单的骨干网.js模型连接
- 将集合加载到主干.js模型中
- 以 json 或 url 编码格式发送 js 模型
- 如何使用 Wolfpack.js 测试我的 Sails.js 模型的唯一电子邮件属性
- 更新 MySQL 数据库中的主干.js模型
- JSON到骨干.js模型