2012-10-06 20 views
1

我試圖獲取集合x次,每次遞增一個計數器。我遇到的問題是,因爲我需要在回調中顯示視圖,並且因爲.fetch()是異步的,所以我不能簡單地執行JavaScript循環。我想以某種方式告訴它在success回調中再次調用自己,而不進入無限循環。在backbone.js中循環collection.fetch一定次數

這是我有:

@collection.fetch 
     data: {q: letters, i: i} 
     success: 
     @renderList() 

我怎樣才能讓這個運行x次,每次遞增i,而等到@renderList再次運行前完成?

UPDATE

所以,我在進步 - 這似乎是工作,但它看起來很可怕:

@collection.fetch 
     data: {q: letters, i: 1} 
     success: 
     @collection.fetch 
      data: {q:letters, i:2} 
      success: 
      @collection.fetch 
       data: {q:letters, i:3} 

此外,成功回調是給我在控制檯這樣的警告:

Uncaught TypeError: object is not a function 

請教?

+0

怎麼可能永遠* *工作過?在每個「成功」部分之後,你已經忘了' - >'或'=>'字符。 [這是你當前的輸出](http://coffeescript.org/#try:%40collection.fetch%0A%20%20%20%20%20%20data%3A%20%7Bq%3A%20letters%2C% 20I%3A%201%7D%0A%20%20%20%20%20%20success%3A%0A%20%20%20%20%20%20%20%20%40collection.fetch%0A%20% 20%20%20%20%20%20%20%20%20data%3A%20%7Bq%3Aletters%2C%20I%3A2%7D%0A%20%20%20%20%20%20%20% 20%20%20success%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%40collection.fetch%0A%20%20%20%20%20% 20%20%20%20%20%20%20%20%20data%3A%20%7Bq%3Aletters%2C%20I%3A3%7D%0A)。 –

回答

1

也許嘗試這樣的遞歸函數(這是唯一的例子):

recursiveFetch = (collection, successCallback, counter, data) -> 
    if counter == 0 
     successCallback() 
     return 
    data.i = counter 
    collection.fetch 
     data: data 
     success: -> recursiveFetch(collection, successCallback, counter-1, data) 

,並調用它像這樣:

recursiveFetch(@collection, => @renderList(), i, {q:letters})