Backbone.js - 对象不支持 属性 或方法 'each'
Backbone.js - Object doesn't support property or method 'each'
我对 Backbone 非常缺乏经验,但继承了另一个开发人员的代码来维护。我正在尝试向模型添加一些新功能。这是我目前拥有的:
var AfeDetailCollection = Backbone.Collection.extend(
{
model: AfeDetailModel,
getSubtotalUSD: function(){
return _.reduce(this.models, function(memo, model, index, list){
return memo + model.getExtCostUSD();
}, 0, this);
},
getSubtotalLocal: function () {
return _.reduce(this.models, function (memo, model, index, list) {
return memo + model.getExtCostLocal();
}, 0, this);
},
hasMixedCurrency: function () {
var currCode = '';
this.models.each(function (model) {
if (currCode == '')
// Identify the currencyCode of the first AfeDetail object in the collection
currCode = model.get('currencyCode');
else if (currCode != model.get('currencyCode'))
// The currencyCode has changed from prior AfeDetail in the collection
return true;
});
return false;
}
}
);
hasMixedCurrency() 函数是我添加的。这两个预先存在的功能工作正常。我要做的是确定 AfeDetail 对象的集合是否包含多个 currencyCode 值(AfeDetail 模型上的 属性)。所以我只是想遍历这个集合,直到我发现 currencyCode 发生变化,然后 return true.
但是,在我页面上的 javascript 中,一旦我尝试检查这个...
if (this.collection.hasMixedCurrency()) {
...
...我明白了:错误:对象不支持 属性 或方法 'each'
我显然做错了什么,可能是一些简单的事情,但我只是没有看到。
看起来 this.models 是一个 javascript 数组 ,而不是 backbonecollection.
你可以试试下划线的每个方法:
_.each(arr, function(val) {
});
你的循环逻辑看起来也不对。试试这个代码:
hasMixedCurrency: function() {
return _.size(_.uniq(this.models, "currencyCode")) > 1;
}
Edit: More performanced way
hasMixedCurrency: function () {
return _.find(this.models, function(v) { return v.currencyCode !== _.first(this.models).currencyCode; }) !== undefined;
}
我对 Backbone 非常缺乏经验,但继承了另一个开发人员的代码来维护。我正在尝试向模型添加一些新功能。这是我目前拥有的:
var AfeDetailCollection = Backbone.Collection.extend(
{
model: AfeDetailModel,
getSubtotalUSD: function(){
return _.reduce(this.models, function(memo, model, index, list){
return memo + model.getExtCostUSD();
}, 0, this);
},
getSubtotalLocal: function () {
return _.reduce(this.models, function (memo, model, index, list) {
return memo + model.getExtCostLocal();
}, 0, this);
},
hasMixedCurrency: function () {
var currCode = '';
this.models.each(function (model) {
if (currCode == '')
// Identify the currencyCode of the first AfeDetail object in the collection
currCode = model.get('currencyCode');
else if (currCode != model.get('currencyCode'))
// The currencyCode has changed from prior AfeDetail in the collection
return true;
});
return false;
}
}
);
hasMixedCurrency() 函数是我添加的。这两个预先存在的功能工作正常。我要做的是确定 AfeDetail 对象的集合是否包含多个 currencyCode 值(AfeDetail 模型上的 属性)。所以我只是想遍历这个集合,直到我发现 currencyCode 发生变化,然后 return true.
但是,在我页面上的 javascript 中,一旦我尝试检查这个...
if (this.collection.hasMixedCurrency()) {
...
...我明白了:错误:对象不支持 属性 或方法 'each'
我显然做错了什么,可能是一些简单的事情,但我只是没有看到。
看起来 this.models 是一个 javascript 数组 ,而不是 backbonecollection.
你可以试试下划线的每个方法:
_.each(arr, function(val) {
});
你的循环逻辑看起来也不对。试试这个代码:
hasMixedCurrency: function() {
return _.size(_.uniq(this.models, "currencyCode")) > 1;
}
Edit: More performanced way
hasMixedCurrency: function () {
return _.find(this.models, function(v) { return v.currencyCode !== _.first(this.models).currencyCode; }) !== undefined;
}