javascript बैकबोन संग्रह डेटा लाता है, लेकिन मॉडल सेट नहीं करता है




json backbone.js (2)

आपके fetchSuccess फ़ंक्शंस में collection.models होना चाहिए। this.models नहीं। this.models

console.log('Collection models: ', collection.models);

और कृपया पिताजी द्वारा दिए गए सुझावों पर विचार करें।

मैं अपने बैकबोन संग्रह को स्थानीय एपीआई से पॉप्युलेट करने और डेटा को दिखाने के लिए दृश्य बदलना चाहता हूं। मेरे संग्रह में प्राप्त कॉल (कॉल) सफल होने लगता है, और डेटा को पकड़ लेता है, लेकिन फ़ेच संचालन संग्रह में मॉडल को अपडेट नहीं करता है।

मेरे मॉडल और संग्रह के लिए यह मेरे पास है:

var Book = Backbone.Model.extend();

var BookList = Backbone.Collection.extend({

    model: Book,
    url: 'http://local5/api/books',

    initialize: function(){
        this.fetch({
            success: this.fetchSuccess,
            error: this.fetchError
        });
    },

    fetchSuccess: function (collection, response) {
        console.log('Collection fetch success', response);
        console.log('Collection models: ', this.models);
    },

    fetchError: function (collection, response) {
        throw new Error("Books fetch error");
    }

});

और मैंने इस तरह मेरे विचार किए हैं:

var BookView = Backbone.View.extend({

    tagname: 'li',

    initialize: function(){
        _.bindAll(this, 'render');
        this.model.bind('change', this.render);
    },

    render: function(){
        this.$el.html(this.model.get('author') + ': ' + this.model.get('title'));
        return this;
    }

});

var BookListView = Backbone.View.extend({

    el: $('body'),

    initialize: function(){
        _.bindAll(this, 'render');

        this.collection = new BookList();
        this.collection.bind('reset', this.render)
        this.collection.fetch();

        this.render();
    },

    render: function(){
        console.log('BookListView.render()');
        var self = this;
        this.$el.append('<ul></ul>');
        _(this.collection.models).each(function(item){
            console.log('model: ', item)
            self.appendItem(item);
        }, this);
    }

});

var listView = new BookListView();

और मेरी एपीआई इस तरह JSON डेटा देता है:

[
    {
        "id": "1",
        "title": "Ice Station Zebra",
        "author": "Alistair MacLaine"
    },
    {
        "id": "2",
        "title": "The Spy Who Came In From The Cold",
        "author": "John le Carré"
    }
]

जब मैं इस कोड को चलाता हूं, तो मुझे यह कंसोल में मिलता है:

BookListView.render() app.js:67
Collection fetch success Array[5]
Collection models:  undefined 

जो मुझे सूचित करता है कि फ़ेच कॉल को डेटा ठीक मिल रहा है, लेकिन यह इसके साथ मॉडल को पॉपुलिंग नहीं कर रहा है। क्या कोई मुझे बता सकता है कि मैं यहाँ क्या गलत कर रहा हूं?


आप अपनी बुकलालिस्ट संग्रह पर दो बार लाने पर कॉल कर रहे हैं, एक बार जब इसे आरम्भ किया जाता है और फिर जब आपका BookListView प्रारंभ होता है। यह एक संग्रह के लिए बुद्ध प्रथा माना जाता है जिस समय यह तत्काल होता है। आप 'रीसेट' ईवेंट के जवाब में एक बार अपने कॉल को प्रारंभ में दो बार अपने दृश्य प्रदान कर रहे हैं और फिर आप इसे सीधे कॉल कर रहे हैं।

मैं अपने बुकलिस्ट संग्रह से पूरी तरह से आरंभिक क्रिया को हटाने का सुझाव देता हूं, और इस कॉल को हटा रहा हूं .render (); आपके BookListView के प्रारंभिक कॉल के अंत में