26

コレクションをRESTfulでない方法で取得したいので、でオーバーライドすることにCollection.fetchしました。

App.carClc = Backbone.Collection.extend({
    model : App.cardModel,
    url : 'http://localhost/bbtest/data.php',
    fetch : function() {
        $.ajax({
            type : 'GET',
            url : this.url,
            success : function(data) {
                console.log(data);
            }
        });
    }
});

コレクションを応答に設定する方法がわかりません。BackboneJSは初めてです、ありがとうございます!

4

5 に答える 5

58

カスタムの「デコレータ」をに追加したいが、fetch完全にオーバーライドしたくない場合は、次のことを試してください。

    var MyCollection = Backbone.Collection.extend({

        //custom methods

        fetch: function(options) {

            //do specific pre-processing 

            //Call Backbone's fetch
            return Backbone.Collection.prototype.fetch.call(this, options);
        }

  });    

ここでは、自分で展開する必要はありません$.ajax

また、Backboneのメソッドreturnによって返されるjQuery promiseを使用する場合は、最後の行のを忘れないでください。fetch

詳細については、 http://japhr.blogspot.in/2011/10/overriding-url-and-fetch-in-backbonejs.htmlを参照してください。

于 2013-01-13T07:11:19.127 に答える
30

バックボーンコレクションには、新しいデータの追加とリセットを設定する2つの方法があります。すべての収集データを受信データに置き換えて、リセットを使用するとします。

 App.carClc = Backbone.Collection.extend({
model : App.cardModel,
url : 'http://localhost/bbtest/data.php',
fetch : function() {
    // store reference for this collection
    var collection = this;
    $.ajax({
        type : 'GET',
        url : this.url,
        dataType : 'json',
        success : function(data) {
            console.log(data);
            // set collection data (assuming you have retrieved a json object)
            collection.reset(data)
        }
    });
}
})
于 2012-11-13T09:53:31.910 に答える
3

私はこのようなものを使用しています:

$.when( $.ajax( URL, { dataType: "json" } ) )
    .then( $.proxy( function( response ) {
            ctx.view.collection.reset( response );                              
    },ctx ) );

collection.reset(data)コレクションを再初期化するために使用する主なポイント

于 2012-11-13T09:52:54.017 に答える
2

約束のためにフェッチを「有効」にしておきたい場合は、次のようなこともできます。

fetch: function() {
    var self = this,
        deferred = new $.Deferred();

    $.get(this.url).done(function(data) {
            // parse data
        self.reset({parsed data});
        deferred.resolve(); //pass in anything you want in promise
     });
     return deferred.promise();
}
于 2014-06-13T00:09:47.857 に答える
0

すべてのモデルやコレクションに対してこれを行う必要がある場合は、をオーバーライドしますBackbone.ajax

オーバーライドすると、通常はに渡されるBackbone.ajaxリクエストが提供されます。(または他の)の応答を返すだけでよく、コレクション/モデルに設定することを心配する必要はありません。options$.ajax$.ajaxPromise

于 2017-02-08T06:51:57.967 に答える