2

APIからデータを取得する次のコレクションがあります。

var Data = Backbone.Collection.extend({
    url: '/* api url - working */',

    sync: function(method, model, options) {
        options.timeout = 10000;
        options.dataType = "jsonp";
        return Backbone.sync(method, model, options);
    }
});

そして、それをビューに表示したい:

var MyView = Backbone.View.extend({
    el : '.myview',
    render : function () {
        var data = new Data();
        var that = this;

        data.fetch({
            success : function (data) {
                console.log(arguments);
                console.log(data);

                var template = _.template( $('#temp').html(), {data: data.models} );
                that.$el.html(template);
            }
        });
    }
});

私が理解していないのは、ログに記録argumentsするとAPIデータを取得し、それがwieired構造を持っているということです:{0:child, 1:object\* contains the api data *\, 2:object}しかし、ログに記録するdataと、child

この構造がわかりません。何が欠けているのでしょうか。また、そこから API データを取得するにはどうすればよいですか?

4

1 に答える 1

2

Collection.fetch渡された成功関数を 3 つの引数で呼び出しています ( Backbone sourceから):

success(collection, resp, options);

argumentsすべての JavaScript 関数の特別なローカル変数です。このドキュメントをチェックしてください。

そのため、ロギングは関数にarguments渡された 3 つのものを示していますが、ロギングは最初に渡されたものだけを示しています。関数にはパラメーターが 1 つしかありませんが、3 つのものが渡されました。successdata

最初に渡されるsuccessのは Backbone Collection 自体です。したがって、それをどうする必要があるかは、テンプレートがどのように見えるかによって異なります。JSON だけをテンプレート関数に渡すのが一般的です: _.template( $('#temp').html(), {data: data.toJSON()} ). 次に、テンプレートで、それらの JSON オブジェクトを反復処理する必要があります。

 <% _.each(data, function(item){ %>
     <div><%= item.foo %></div>
 <% }); %>
于 2013-03-14T13:46:55.290 に答える