2011-05-17 12 views
28

Estoy intentando hacer una pequeña aplicación para aprender cómo funciona Backbone. Tomé la aplicación de ejemplo de la fuente llamada Todo. Creé mi aplicación desde cero utilizando fragmentos de la aplicación Todo. Creo que estas aplicaciones se ven muy similares, pero por alguna razón no puedo hacer funcionar algunas cosas que funcionan bien en la aplicación de ejemplo. Me aparece un error:Se debe especificar una propiedad o función 'url' en Backbone.js

A 'url' property or function must be specified 

El otro problema es que no puedo hacer que el código del ejemplo de trabajo:

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

Se dice que no hay una función tal como se unen. Revisé todas las versiones y el código de las bibliotecas y no puedo darme cuenta de lo que hago mal. ¿Qué puedo hacer sobre esto?

+3

Sin más de su código, es difícil interpretar el problema con el error de URL. Lo más obvio, para mí, es que está tratando de obtener algo de un servidor de back-end y necesita una URL para eso en la construcción, pero no ha proporcionado uno. Para el segundo error, ¿su modelo es un modelo de red troncal? Coloque un "console.log (this.model)" en la línea superior, mire en Firebug y descubra si tiene una propiedad bind. –

Respuesta

38

El ejemplo TODO se basa en localStorage por lo que no define una url (ya que es local). Sin embargo, cuando usa la implementación Backbone.sync predeterminada, necesita definir un atributo url en sus colecciones y modelos (puede ser estático o una función). No hacerlo resulta en el error que tienes.

En cuanto a this.model.bind, supongo que ha perdido la referencia a su modelo de alguna manera. Dos cosas: esto no es lo que cree que es o this.model no está definido. Publique más código para tener respuestas completas.

+0

Gracias por los consejos, los verificaré ahora y le informaré si resuelvo los problemas. Gracias. –

+2

esto contradice la documentación de la red troncal: "Genera direcciones URL de la forma:" /[collection.url]/[id] ", volviendo a"/[urlRoot]/id "si el modelo no es parte de una colección." – liammclennan

+4

Esta respuesta fue para la red troncal 0.3.x, el proyecto evolucionó desde el año pasado ... – Julien

3

La colección intenta cargar un montón de modelos de salida de JSON en la URL:

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

Si esa URL apunta a una salida de JSON de sus modelos, ya está bueno para ir.

También puede anular el camino una colección hace llamado reparador de nuevo a su servidor para soportar los sistemas de herencia o un adaptador de almacenamiento local: http://documentcloud.github.com/backbone/#Sync

0

Asignación a url propiedad de colección trabajado para mí

todoList.url = "/GetData/GetTodo"; 
Cuestiones relacionadas