0

まだBackboneに頭を悩ませており、ファイルからJSONを渡すときにコレクションが読み込まれないという問題が発生しています。fetch()呼び出しはエラーになりますが、console.log()が有用なことを何も教えてくれないため、正確にデバッグする方法がわかりません(私がそれらを掘り下げる方法を知っている限り)。

コードは次のとおりです。

ItemGroup = Backbone.Collection.extend({

    model: Item, // left out definition since it's very simple

    url: 'js/items.json',

    initialize: function(models, options) {
        this._meta = {};
    },

    parse: function(response) { // parse is not being called, not sure why?
        this.set(response.name, 'name');
        return response.items;
    },

    set: function(val, prop) {
        this._meta[prop] = val;
    },

    get: function(prop) {
        return this._meta[prop];
    }

});

ItemGroupView = Backbone.View.extend({

    el: '#item-container',

    initialize: function(options) {

        this.collection.bind('reset', this.render, this);
        this.collection.fetch({
            success : function() {
                alert('successful');
            },
            error : function(collection, xhr, options) { // This is being triggered, not sure why?
                console.log(collection);
                console.log(xhr);
                console.log(options);
            }
        });

    },

    processItem: function(item) {
        var itemView = new ItemView({ model: item });
        this.$el.append(itemView.render().el);
    },

    render: function() {

        console.log(this.collection); // this shows an empty collection

        var itemGroupHtml = this.template({ name: this.collection.get('name') });
        $(this.main).html(itemGroupHtml);

        _.each(this.collection.models, this.processItem, this);

        return this;
    }

});

var toiletryItems = new ItemGroup();
var toiletryGroupView = new ItemGroupView({ collection: toiletryItems });

そして、これが私のjsonです(Chomeインスペクターを使用したネットワークリクエストではファイルが200と表示されているため、ファイルが正常に検出されていることがわかります):

[
 {
    'name' : 'toiletries',
    'items' : [
        { 'name': 'toothbrush' },
        { 'name': 'deodorant' },
        { 'name': 'toothpaste' },
    ]
 }
]

前もって感謝します!

アップデート:

無効なjsonを修正しましたが、まだ空のtoilterryItemsコレクションが表示されています。何か案は?

4

1 に答える 1

0

問題が私の解析関数にあることを発見しました。応答パラメータは配列であるため、関数は次のようになります。

parse: function(response) { // parse is not being called, not sure why?
    this.set(response[0].name, 'name');
    return response[0].items;
},
于 2013-03-04T09:39:52.740 に答える