2011-07-26 13 views
2

モデルフェッチで成功コールバックがあり、すべて正常に動作しますが、firefoxではイベントは発生しません。コンソールによると、要求は完了します。model.fetch成功コールバックはfirefoxでは発生しませんが、chromeで動作します

コードサンプル:

親クラス関数:

DownloadUserPromotions: (callback) -> 
    self = @ 
    @model = new app.models.client({ id: JSON.parse($.cookie('jsondata')).id }) 

    lm = -> 
     console.log "4" 
     window.USER = self.model 
     if typeof callback == 'function' then callback.call() 

    @model.fetch 
     success: lm 
     data: 
     relationships: 'client_promotions' 
    console.log "3" 

ビュー機能:

render: ->  
    self = @ 
    self.ReadUserInfo() 
    console.log "1" 
    renderTemplate = -> 
     console.log "5" 
     #Below Issue is wierd.......#TODO 
     @USER = JSON.parse(JSON.stringify(@USER)) 
     $(self.el).html clientsPromotionsTemplate 
     promos: USER.client_promotions 
     $('.spinner#load').hide() 
     self.FadeIn() 

    $('.spinner#load').show() 
    console.log "2" 
    @DownloadUserPromotions renderTemplate 
    @ 

側注:マークTODOは別の問題です。ボーナスJSONがなぜそんなに複雑な仕組みでしか動作しないのかを理解するのを手伝ってくれてありがとう。

答えて

2

私の成功コールバックはJSONオブジェクトの一部だったので、Firefoxはそれが探していたデフォルトを見つけられなかったので、何も起動しませんでした。 firefoxは成功のコールバックを探す場所を知っているので、この問題を解決するためにdataType: 'json'を指定すると、この問題が解決されます。

Chromeは明らかに私の気持ちを読んでいます...

2

最初に、あなたは、coffeescriptで関数を定義するために、=>と - >の違いを知る必要があります。

=>は、関数がを定義したときに、このが何であったかに関数内このをバインドします。

- >関数が

self = this 

に呼び出されたときに、このが何であったかに関数内このをバインドを使用すると、上記の使用方法を理解していないのCoffeeScriptのコードの臭いのサインですあなたが=>解決する問題を解決するためにをこのキャプチャしようとしているように正しく。あなたは、関数の再記述されたが、

render: -> 
    @ReadUserInfo() 
    console.log "1" 
    renderTemplate = => 
     console.log "5" 
     #Below Issue is wierd.......#TODO 
     @USER = JSON.parse(JSON.stringify(@USER)) 
     $(@.el).html clientsPromotionsTemplate 
     promos: USER.client_promotions 
     $('.spinner#load').hide() 
     @.FadeIn() 

    $('.spinner#load').show() 
    console.log "2" 
    @DownloadUserPromotions renderTemplate 
    @ 

、おそらく可能性があり、レンダリング

はあなたの奇妙な問題のいくつかを修正します。以前私は@USERは、コールバックが呼び出されたときに、このがあるかもしれないものは何でもthis.USERと にすることができます拡大されるように、あなたが

@USER = JSON.parse(JSON.stringify(@USER)) 

を持っていたラインは、あなたが期待通りに働いたことはなかっただろうことを かなり確信していますあなたのフレームワークとブラウザで に応じてかなりランダムです。

+0

=> vs - >を説明してくれてありがとうございます。私の学習を反映するために多くのコードを変更しました。このバインディングはUSERの問題ではありませんでした。私は、オブジェクトを得るためにラウンドアバウトの方法をしなければ、それでもエラーをスローします。 – userinev

+0

受け入れられた回答を変更したいと思うかもしれません;) – bradgonesurfing

関連する問題