2014-06-19 56 views
1

我有一個單骨幹視圖:Backbone.js的打破了每個循環而切換視圖

TestView = Backbone.View.extend({ 
      initialize : function(){ 
      _.each(array,function(arrayElement){ 
       //-do something  
      }); 
     }; 

}) 
return TestView() 

的問題是,我想重複使用該視圖,但有時在陣列上,其中「每個」循環迭代非常大,所以當我切換視圖並重新輸入(重新使用)該視圖時,前面的每個循環仍在運行。有什麼辦法可以在切換視圖時停止已經執行的每個循環?

+0

你可以精心設計一下嗎?像「爲什麼是單身人士」以及「陣列」是什麼,等等。 – Ingmars

+0

我在設計中看到一些紅旗。也許你正在檢索太多的數據?也許你不應該重用視圖?無論如何,如果您必須提出這個問題,您應該首先審查您的設計。 – Upperstage

回答

1

我不這麼認爲,因爲_.each是同步操作,你不能通過任何標誌或任何控制它。我建議你使用遞歸setTimeout(只是爲了使它異步和非阻塞)與幾毫秒的偏移,也許你就能中斷執行..

var arr = [1,2,3]; 

function asyncEach(elementsArray) { 
    var element; 

    if (globalFlag) { 
    element = elementsArray.shift(); 

    // do something with element 

    setTimeout(function() { 
     asyncEach(elementsArray); 
    }, 10); 
    } 
} 
1

可以使用_.every()而不是​​。請務必返回truefalse以指示是否繼續循環。

 initialize : function(){ 
     _.every(array,function(arrayElement){ 
      //-do something 

      if (shouldIContinue) { 
       return true; 
      } else { 
       return false; 
      } 
     }); 
+0

我希望主幹提供了一些東西,我可以在切換視圖時停止所有的函數調用和循環(同時不破壞它)? –