Pergunta

Ao solicitar data.json arquivo para preencher a coleção que contém os dados abaixo

[{
    "Id": "BVwi1",
    "Name": "Bag It",
    "AverageRating": 4.6,
    "ReleaseYear": 2010,
    "Url": "http://www.netflix.com/Movie/Bag_It/70153545",
    "Rating": "NR"
}, {
    "Id": "BW1Ss",
    "Name": "Lost Boy: The Next Chapter",
    "AverageRating": 4.6,
    "ReleaseYear": 2009,
    "Url": "http://www.netflix.com/Movie/Lost_Boy_The_Next_Chapter/70171826",
    "Rating": "NR"
}]

A coleção não invoca o evento "Reset" como a documentação diz que deveria.Posso ver que a solicitação e a resposta estão corretas após o método de busca, mas nada acontece.Abaixo está o código do meu aplicativo.Roteador que inicia é tudo

Theater.Router = Backbone.Router.extend({
    routes: {
        "": "defaultRoute"
    },

    defaultRoute: function () {
        Theater.movies = new Theater.Collections.Movies()
        new Theater.Views.Movies({
            collection: Theater.movies
        });
        Theater.movies.fetch();
    }
})
var appRouter = new Theater.Router();
Backbone.history.start();

a coleção

Theater.Collections.Movies = Backbone.Collection.extend({
    model: Theater.Models.Movie,
    url: "scripts/data/data.json",
    initialize: function () {}
});

Visualização que se inscreve no evento de redefinição

Theater.Views.Movies = Backbone.View.extend({
    initialize: function () {
        _.bindAll(this, "render", "addOne");
        this.collection.bind("reset", this.render);
        this.collection.bind("add", this.addOne);
    },

    render: function(){
        console.log("render")
        console.log(this.collection.length);
    },

    addOne: function (model) {
        console.log("addOne")
    }
})

Site de referência

http://bardevblog.wordpress.com/2012/01/16/understanding-backbone-js-simple-example/

Foi útil?

Solução

Eu tive um problema semelhante, espero que minha resposta seja útil para outras pessoas.No começo meu data.json arquivo não era válido.Então descobri que esqueci a seguinte linha de código:

Theater.Models.Movie = Backbone.Model.extend({}

Adicionar esta linha de código resolveu o problema para mim.

Outras dicas

Você deve dizer ao Backbone para disparar a redefinição na busca passando {reset: true} ao buscar no Backbone 1.0

Substituir:

Theater.movies.fetch()

Com

Theater.movies.fetch({reset :true})

Pode haver um problema com sua busca se a coleção não estiver sendo preenchida.Veja esta resposta para ver como passar um manipulador de erro para a operação de busca.

Tenho o mesmo problema ... e o resolvi ao:

youColloection.fetch({reset: true});
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top