2011-10-28 9 views
3

現在、バックボーンに(またはその周辺に)奇妙な問題があります。私はカスタム成功とエラーのコールバックを置くバックボーンコレクションオブジェクトを持っています。'fetch'(Backbone.Collection上)の後に成功/エラーコールバックが呼び出されない

A)---->ワーキング

 

    Fubars = Backbone.Collection.extend({ 

     url: "/listfubar", 
     model: Fubar, 
     fetchS: function() { 
     fetch( { success : sFn, 
        error : eFn, 
        statusCode : cFn 
     }); 
     }, 
    }) 

    var fbars = new Fubars(); 
    fbars.fetchS(); 

B)----> 'Fubars.fetchS' は通常のJavaScriptによって呼び出されているとき、これが正常に動作します

 

    afterPoll = function() { 
     fbars.fetchS() 
    } 

を破りますファイルA)。しかし、fetchS(および指定のコールバック)自体が 'ajaxPoll'コールバックから呼び出されたときに問題が発生します。B)。 'fetchS'は適切に呼び出され、コールバックはすべて存在し、ネットワーク呼び出しはBackbone.sync> JQuery.ajaxによって行われます。しかしsuccess、error、またはstatusCodeコールバックは決して呼び出されません(ネットワークコールは間違いなく消えて正常に戻ります)。

誰もこれに遭遇しましたか? 「afterPoll」が終了すると、成功とエラーのコールバックが何らかの形で消滅しているとしか思えません。しかし、「fubars」はグローバルオブジェクトなので意味がありません。

私は同様の投稿(here)を見ましたが、私の問題を解決していません。どんな洞察力も大変ありがとうございます。

おかげ

+1

が、私は疑問に思います。 'afterPoll = _.bind(fbars.fetchS、fbars);を実行するとどうなりますか? afterPoll(); '? – hyperslug

+0

コンソールウィンドウを開いて、例外が発生していないかどうかを確認してください。 –

+0

コールバックがまったく呼び出されないか、またはコールバックが機能しないかどうかを明確にする必要があります。私の賭けは、それらが呼び出されていることですが、彼らは正しい "this"を持っていないので動作しません。また、コールバックで現在のオブジェクトを "this"として設定するにはbindまたはbindAllを使うべきです。 /documentcloud.github.com/underscore/#bindAll – dira

答えて

0

フェッチのためにこれを行う。..

 
    
    (function fetch(){success:...,error:... }).call(); 
    or 
    (function fetch(){return {success:...,error:...} 
    }).call(); 
 

0

私はこの問題は、この行方不明が原因である可能性があり、疑います。

は、このステートメントを交換してください:

fetch( { success : sFn, 
       error : eFn, 
       statusCode : cFn 
    }); 

この文で: `フェッチ()` `fbars`インスタンスへの参照を必要とする場合

this.fetch( { success : sFn, 
       error : eFn, 
       statusCode : cFn 
    }); 
関連する問題