2014-01-24 58 views
1

我以Backbone開始,並且正在撰寫手機銷售應用程序。但我的疑問是關於JavaScript執行流程。誤解JavaScript執行流程

的situacion是,我有一個自定義的方法來拒絕我的購物車收集的重複,這些方法是這樣的:

var Cart = Backbone.Collection.extend({ 
      contains : function(aProduct){ 
       _.each(this.models, function(element, index, list){ 
        if(element.get('product').get('id') == aProduct.get('id')){ 
         return true; 
        } 
       }); 
       return false; 
      } 
     }); 

該方法檢測的重複,並試圖返回true,但該行ISN最後一個,因爲最後執行的聲明是「返回錯誤」。在這一點上,我意識到我在這個JavaScript執行流程中有一個誤解。

也許你可以ENLIGHT我與你的知識

感謝

+0

東西在裏面可能是異步的,即時通訊不太熟悉Backbone,所以不確定它是哪一個。 – tymeJV

回答

0

您從您傳遞到_.each函數返回true。這與你的包含函數不同。這是一種方式來獲得它的工作:

var Cart = Backbone.Collection.extend({ 
      contains : function(aProduct){ 
       var doesContain = false; 
       _.each(this.models, function(element, index, list){ 
        if(element.get('product').get('id') == aProduct.get('id')){ 
         doesContain = true; 
        } 
       }); 
       return doesContain; 
      } 
     }); 

然而,更好的方法(假設是lodash或下劃線),是使用_.any

var Cart = Backbone.Collection.extend({ 
      contains : function(aProduct){ 
       return _.any(this.models, function(element){ 
        if(element.get('product').get('id') == aProduct.get('id')){ 
         return true; 
        } 
       }); 
      } 
     }); 
+0

更好的方法是使用'_.contains':p – david

+0

這可能不適用於這種情況,因爲它們不太可能是同一個對象。而是兩個相同的對象。 –

+0

感謝Matt和@David,我沒有意識到這一點。愚蠢的錯誤 – Franco