javascript - validar - ¿Cómo encontrar un modelo de una colección de acuerdo con algún atributo que no sea la ID?
validar formulario javascript html5 (4)
La forma más simple es usar la opción "idAttribute" del Backbone Model para que Backbone sepa que desea usar "name" como su Id del modelo.
Friend = Backbone.Model.extend({
//Create a model to hold friend attribute
name: null,
idAttribute: ''name''
});
Ahora puede usar directamente el método Collection.get () para recuperar un amigo usando su nombre. De esta forma, Backbone no recorre todos sus modelos de Friend en la colección, pero puede buscar directamente un modelo en función de su "nombre".
var lee = friends.get(''Lee'');
Tengo un modelo con varios objetos:
//Model
Friend = Backbone.Model.extend({
//Create a model to hold friend attribute
name: null,
});
//objects
var f1 = new Friend({ name: "Lee" });
var f2 = new Friend({ name: "David"});
var f3 = new Friend({ name: "Lynn"});
y también, agregaré estos amigos objetan a una colección:
//Collection
Friends = Backbone.Collection.extend({
model: Friend,
});
Friends.add(f1);
Friends.add(f2);
Friends.add(f3);
y ahora quiero obtener un modelo de acuerdo con el nombre del Amigo. Sé que puedo agregar un atributo de ID
para lograr esto. Pero creo que debería haber una manera más simple de hacer esto.
Las colecciones de backbone admiten el método de find
subrayado, por lo que su uso debería funcionar.
things.find(function(model) { return model.get(''name'') === ''Lee''; });
Para búsquedas basadas en atributos simples, puede usar Collection#where
:
donde
collection.where(attributes)
Devuelve una matriz de todos los modelos en una colección que coincida con los atributos pasados. Útil para casos simples de
filter
.
Entonces, si friends
es tu instancia de Friends
, entonces:
var lees = friends.where({ name: ''Lee'' });
También hay Collection#findWhere
(una adición posterior como se indica en los comentarios):
findWhere
collection.findWhere(attributes)
Al igual que en donde , pero solo devuelve directamente el primer modelo de la colección que coincide con los atributos pasados.
entonces, si solo buscas uno, puedes decir cosas como:
var lee = friends.findWhere({ name: ''Lee'' });
Puede llamar a findWhere()
en las colecciones de Backbone, que devolverán exactamente el modelo que está buscando.
Ejemplo:
var lee = friends.findWhere({ name: ''Lee'' });