Obtenir les attributs de modèle dans l'backbone.js
J'ai ce modèle
var Item = Backbone.Model.extend({
url: 'http://localhost/InterprisePOS/Product/loaditembycategory/Event Materials'
});
var onSuccess = function(){ alert("success"); };
Et une collection
var Items = Backbone.Collection.extend({
model: Item
});
Et le reste de mon code est ici:
var item = new Item();
var items = new Items();
item.fetch({ success: onSuccess });
alert(items.get("ItemCode"));
Ce que je veux, c'est simplement d'obtenir les attributs du modèle. Maintenant, j'ai ce sur firebug. Aussi lorsque je l'exécute sur le navigateur, je reçois l'alerte succès et la prochaine alerte est undefined.
C'est la sortie:
{"ErrorMessage":null,"Items":[{"ErrorMessage":null,"CategoryCode":"Event Materials","ClassCode":null,"Components":null,"GroupCode":null,"ImageURL":null,"ItemCode":"ITEM-123","ItemDescription":"Old World Lamppost\u000d\u000a\u000d\u000a","ItemName":"GET123","ItemType":null,"KitItem":null,"Matrix":null,"Prefix":null,"RetailPrice":107.990000,"SalesTaxCode":null,"UPCCode":null,"UnitMeasureCode":"EACH","UnitsInStock":0,"Value":null,"WholesalePrice":95.000000}]}
NOTE
C'est juste un des éléments qu'il renvoie. Je viens de poster sur le point de sorte qu'il ne sera pas si long.
Vous devez vous connecter pour publier un commentaire.
Vous appelez
get
sur votre collection ( voir http://documentcloud.github.com/backbone/#Collection-get)Il semble que vous voulez vraiment est d'itérer sur la collection, et l'appel d'obtenir sur chaque élément
Si non, veuillez préciser les!
En outre, si votre modèle d'url répond avec une liste de modèles, vous devez définir l'attribut url dans votre Collection à la place de votre modèle.
Et votre réponse doit être un tableau, avec des Articles comme des éléments d'un tableau
[<item1>, <item2>, ...]
, plutôt qu'un objet JSON avec{'Items': [<item1>, <item2>, ...] }
. Si vous ne voulez pas modifier la réponse, vous aurez à mettre en œuvre laparse
fonction de votre collection ( http://documentcloud.github.com/backbone/#Collection-parse ).Aussi, comme @chiborg mentionne, vous appelez
get
juste aprèsfetch
(qui se termine de façon asynchrone), donc il n'y a aucune garantie que vos données seront disponibles.La bonne solution ici est de se lier à un "actualiser" auditeur sur la collection.
Cela est dû au modèle de chargement asynchonously -
item.get("ItemCode")
ne fonctionnera qu'une fois que le modèle a été chargé avecfetch
. Essayez de l'appeler dans votre onSuccess fonction.En outre, notez qu'il ne va pas aider à initialiser
Item
directement. Ce que vous essayez de faire est d'obtenir un élément dans la collectionItems
et ensuite appeleritem.get("ItemCode")
sur cet élément, comme ceci: