2012-09-24 196 views
0

我有這樣的代碼中的CoffeeScript:爲什麼在_.each循環重載循環中獲取集合?

render: (collectionName)=> 
    console.log "I am rendering" 
    @buildBreadcrumb(collectionName) 

buildBreadcrumb: (collectionName) -> 
    i=0 
    _.each @urlParts, (url_part) => 
     i++ 
     console.log('value of i : ',i) 
     collection = @getCollection(collectionName) 
     if (collection.length == 0) 
     collection.fetch({ 
      success: (collection) => 
      @render() 
     }) 
     else 
     @appendBreadcrumb() 

而且我不明白爲什麼,有時候,我得到了一個輸出爲:

I am rendering 
value of i : 1 
value of i : 2 
value of i : 3 
/* STRANGE START HERE */ 
value of i : 2 
value of i : 3 

如果我刪除@render這個問題消失()取得成功。這就像_each循環再次啓動... 但爲什麼?

如果我把@render放在「complete」回調上,一切正常。

render: (route)=> 
    console.log "I am rendering" 
    @buildBreadcrumb() 

buildBreadcrumb: -> 
    i=0 
    _.each @urlParts, (url_part) => 
     i++ 
     console.log('value of i : ',i) 
     collection = Proscale.Collections.getCollection(collectionName) 
     collection.fetch({ 
     complete: (collection) => 
      @render() 
     }) 
+0

爲什麼你寫的渲染:(集合名)=>,它應該呈現:()=>在你的代碼 –

+1

你叫@buildBreadcrumb遞歸.. –

+0

是,這是因爲我簡化了stackoverflow的代碼。實際上,只有在收藏品爲空的情況下才能獲取。 – Sebastien

回答

1

試試這個,

render:()=> 
    console.log "I am rendering" 
    @buildBreadcrumb(collectionName) 

buildBreadcrumb: (collectionName) -> 
    i=0 
    _.each @urlParts, (url_part) => 
     i++ 
     console.log('value of i : ',i) 
     collection = @getCollection(collectionName) 
     collection.fetch({ 
     success: (collection) => 
      @doSomething(collection) 
     }) 

doSomething : (collection) ->