tutorial significado react collection backbone javascript model-view-controller rest backbone.js

javascript - significado - ¿Cómo busco un único modelo en Backbone?



backbone view events (7)

Tengo un modelo de Clock en Backbone:

var Clock = Backbone.Model.extend({});

Estoy tratando de obtener una instancia de eso que tenga la información más reciente de /clocks/123 . Algunas cosas que he intentado:

un método de nivel de "clase"

Clock.fetch(123) // TypeError: Object function (){ ... } has no method ''fetch''

crear una instancia y luego invocar fetch sobre ella:

c = new Clock({id: 123}) c.fetch() // Error: A ''url'' property or function must be specified

Una colección

Traté de crear un AllClocks colección AllClocks (aunque no tengo ningún uso para tal cosa en la página):

var AllClocks = Backbone.Collection.extend({ model: Clock, url: ''/clocks/'' }); var allClocks = new AllClocks(); allClocks.fetch(123); // returns everything from /clocks/

¿Cómo obtengo un reloj respaldado por API?


... y haga esto si no desea la barra inclinada posterior en el modelo urlRoot:

url : function() { return this.urlRoot + this.id; },


Personalmente lo recomiendo, siguiendo la documentcloud.github.com/backbone/#Model-url

model = new Model(id: 1) view = new View(model: model) collection = new Collection([model]) model.fetch()

en su colección recuerde agregar la url de la colección:

url: "/models"

y en la función de inicialización de tu Vista hazlo:

this.model.bind("change", this.render)

De esta forma, la red troncal hará una solicitud de ajax usando esta URL:

"/models/1"

su modelo será actualizado y la vista procesada, sin modificar Collection # url o Model # urlRoot

Nota: disculpe que este ejemplo salió en coffee script, pero puede traducirlo fácilmente a js al agregar sentencias var


Probablemente deberías acceder al objeto a través de una colección y mantenerlo en la colección todo el tiempo. Asi es como se hace:

var AllClocks = Backbone.Collection.extend({ model: Clock, url: ''/clocks/'' }); var allClocks = new AllClocks(); my_clock = allClocks.add({id: 123}); my_clock.fetch()


Pruebe a especificar urlRoot en el modelo:

De los documentos:

var Book = Backbone.Model.extend({urlRoot : ''/books''}); var solaris = new Book({id: "1083-lem-solaris"}); solaris.fetch();


Quiero utilizar la URL RESTful, pero no pude entender por qué ''postId'' no se puede agregar a la url base.

var PostModel = Backbone.Model.extend({ urlRoot: ''getBlogPost'', defaults: { postTitle: "defaultTitle", postTime: "1970-01-01", postContent: "defaultContent", postAuthor: "anonymous" } }); var post = new PostModel({ postId: 1 }); alert(post.url());

Entonces sé que solo después de configurar ''idAttribute'' como ''postId'' en Model, puedo obtener la url correcta. Me gusta esto:

var PostModel = Backbone.Model.extend({ idAttribute: ''postId'', urlRoot: ''getBlogPost'', defaults: { postTitle: "defaultTitle", postTime: "1970-01-01", postContent: "defaultContent", postAuthor: "anonymous" } });


Su segundo enfoque es el enfoque que he usado. Intente agregar lo siguiente a su modelo de Reloj:

url : function() { var base = ''clocks''; if (this.isNew()) return base; return base + (base.charAt(base.length - 1) == ''/'' ? '''' : ''/'') + this.id; },

Este enfoque asume que ha implementado controladores con hashbang en su URL como lo hace, http://www.mydomain.com/#clocks/123 , pero debería funcionar incluso si aún no lo ha hecho.


var Person = Backbone.Model.extend({urlRoot : ''/person/details''}); var myName = new Person({id: "12345"}); myName.fetch();

Como resultado, usted hace una solicitud de Ajax en el

URL http://[domainName]/person/details/id

y tienes la respuesta JSON de vuelta.

Enjoiiii !!!