javascript - Compruebe si algo es un modelo o una colección en la red troncal js
backbone.js (5)
Esto es igualmente hackish, pero una colección Backbone tiene una propiedad de modelo, y un modelo no, es en sí mismo un modelo.
Quizás un método más seguro sea model.toJSON () y vea si el resultado es un objeto o una matriz. Probablemente va a modelar.toJSON () en su Backbone.sync personalizado de todos modos, así que aunque esto es bastante costoso desde el punto de vista computacional, sucedería de todos modos.
Cuando anula la sincronización de la red troncal, tanto el modelo / colección .save () / fetch () utiliza el mismo método de sincronización de red troncal, entonces, ¿cuál es la mejor manera de verificar si lo que Backbone.sync recibe es un modelo o una colección de modelos?
Como ejemplo:
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
}
Supongo que estoy buscando una mejor práctica "segura". Por supuesto, podría verificar ciertos atributos o métodos que solo tiene una modelo o una colección, pero parece una hazaña, ¿no debería haber una mejor manera obvia? Y probablemente es que simplemente no pude encontrarlo.
¡Gracias!
La respuesta de @ fiskers7 funciona con extensión profunda:
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
No estoy muy seguro de cómo me siento sobre esto porque parece un poco hackish, pero no puedo pensar exactamente por qué sería súper malo en este momento.
Definitivamente simple, y más rápido que una verificación "instancia de" (supongo que no nombrarás ninguna otra función "isBBModel / Collection" en tus objetos?)
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; }
Podrías hacer algo como esto.
Backbone.Model.prototype.getType = function() {
return "Model";
}
Backbone.Collection.prototype.getType = function() {
return "Collection";
}
if(model.getType() == "Model") {}
if(model.getType() == "Collection"){}
También puedes probar instanceof
así:
Backbone.sync = function(method, model, options) {
if (model instanceof Backbone.Model) {
...
} else if (model instanceof Backbone.Collection) {
...
}
}