我从Backbone开始,我正在为手机销售编写应用程序。但我怀疑是专门针对javascript执行流程。
情况是我有一个自定义的方法来拒绝我的购物车集合上的重复,这些方法是这样的:
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,但该行不是最后一行,因为执行的最后一个语句是“return false”。在这一点上,我意识到我在这个javascript执行流程中有一个误解。
也许你们其中一个人可以用你的知识来启发我
感谢
答案 0 :(得分: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;
}
});
}
});