web-dev-qa-db-fra.com

Une propriété ou une fonction 'url' doit être spécifiée erreur dans Backbone.js

J'essaie de créer une petite application pour apprendre comment fonctionne Backbone. J'ai pris l'exemple d'application de la source appelée Todo . J'ai créé mon application à partir de zéro à l'aide d'extraits de l'application Todo. Je pense que ces applications sont très similaires, mais pour une raison quelconque, je ne peux pas faire fonctionner certaines choses qui fonctionnent bien dans l'exemple d'application. Je reçois une erreur:

A 'url' property or function must be specified

L'autre problème est que je ne peux pas faire fonctionner ce code à partir de l'exemple:

this.model.bind('change', this.render);

Il dit qu'il n'y a pas de fonction telle que bind. J'ai vérifié toutes les versions et le code des bibliothèques et je ne peux pas réaliser ce que je fais mal. Que puis-je faire à ce sujet?

28
Sergei Basharov

L'exemple TODO s'appuie sur localStorage et ne définit donc pas d'URL (car il est local). Cependant, lorsque vous utilisez l'implémentation Backbone.sync par défaut, vous devez définir un attribut url sur vos collections et modèles (il peut s'agir d'une fonction statique ou d'une fonction). Ne pas le faire entraîne l'erreur que vous avez obtenue.

En ce qui concerne le this.model.bind, je suppose que vous avez en quelque sorte perdu la référence à votre modèle. Deux choses: this n'est pas ce que vous pensez que c'est ou this.model n'est pas défini. Publiez plus de code pour avoir des réponses complètes.

37
Julien

La collection tente de charger un tas de modèles à partir de la sortie json à l'URL:

window.MyList = Backbone.Collection.extend({
  model: MyModel,
  url: 'someurl.json', // load a bunch of json objects into models.
});

Si cette URL pointe vers une sortie json de vos modèles, vous êtes prêt à partir.

Vous pouvez également remplacer la façon dont une collection effectue un rappel reposant vers votre serveur pour prendre en charge les serveurs hérités ou un adaptateur de stockage local: http://documentcloud.github.com/backbone/#Sync

3
Rimian

L'attribution d'une URL de propriété de collection a fonctionné pour moi

todoList.url = "/GetData/GetTodo";
0
sairfan