0

Collectionを更新する前に、データベーステーブル全体を読み取ってBackbone.jsを埋めたいと思いますView

私はイベントを使用fetchして聞いていresetます。

私の問題は、サーバーに対してhttpリクエストが行われる前にリセットイベントが発生することです。

私の質問は、フェッチ時にサーバーからデータを受信した後にビューをレンダリングするにはどうすればよいですか?

これが問題を示すjsfiddleです(デバッガーがリセットされた状態で):

http://jsfiddle.net/GhaPF/16/

コード:

$(document).ready(function() {

    var Item = Backbone.Model.extend({
        urlRoot : './items'
    });

    var ItemList = Backbone.Collection.extend({
        model: Item,
        url: './items/',
    });


    var ItemListView = Backbone.View.extend({
        el: 'body',
        initialize: function(myitemList) {
            this.itemlist = myitemList;
            this.itemlist.bind('reset', this.debuggThis());
        },
        debuggThis: function() {
            debugger;
        },
        render: function() {

        },
        events: {
            "keypress #new-item":  "createOnEnter"
        },
        createOnEnter: function(e) {
        }
    });

    $("#new-item").focus();
    var itemlist = new ItemList();
    var myitemListView = new ItemListView(itemlist);
    itemlist.fetch();
});​

次のコードは機能しますが、ビュー定義の外に配置されるため、適切なbackbone.js(MVC)コードのようには感じられません。

itemlist.fetch().complete(function(){
4

2 に答える 2

3

たぶん問題はこの行です:

this.itemlist.bind('reset', this.debuggThis());

実際には次のようになります。

this.itemlist.bind('reset', this.debuggThis);

debugThis関数は、イベントがトリガーされたときではなく、「リセット」イベントのリスナーを設定したときに実行されていました。これは、debugThisがコールバック関数である代わりに、debugThisがコールバック関数を返すようにすることをJavaScriptに伝えていました。

また、3番目のパラメーターとして「this」を渡すことに関するorangewarpのコメントもおそらく関連しています。つまり、次のようになります。

this.itemlist.bind('reset', this.debuggThis, this);
于 2012-09-10T16:40:18.767 に答える
2

それは奇妙です。コレクションにデータが入力された後fetch()、リセットイベントをトリガーする必要があります。ですから、httpリクエストが起動する前にリセットが発生するという現象は、あなたが思っていることではないかもしれないと私は考えています。

完全なものを使用する代わりに、次のような成功コールバックオプションをいつでも使用できます。

itemlist.fetch({
    success: function() {
        // Whatever code you want to run.
        itemlist.debuggThis();
    }
});

また、あなたをバインドするとき、resetあなたはおそらくこれが欲しいでしょう:

this.itemlist.bind('reset', this.debuggThis, this);
于 2012-09-10T16:04:51.650 に答える