Backbone.js -对象不支持属性或方法'each'

jtjikinw  于 2022-11-10  发布在  其他
关注(0)|答案(1)|浏览(163)

我对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中的变化,然后返回true。
在我的页面上的javascript中,然而,只要我试着检查这个...

if (this.collection.hasMixedCurrency()) {
   ...

......我明白了:* 错误:对象不支持属性或方法“each”*
我显然做错了什么,可能是一些简单的事情,但我只是没有看到它。

ds97pgxw

ds97pgxw1#

看起来this.models是一个javascript数组,而不是一个Backbone.js 集合
你可以试试用下划线的每一种方法:

_.each(arr, function(val) { 

});

另外,循环中的逻辑看起来也不对。请尝试以下代码:

hasMixedCurrency: function() {
    return _.size(_.uniq(this.models, "currencyCode")) > 1;
}

**编辑:**更高性能的方式

hasMixedCurrency: function () {
    return _.find(this.models, function(v) { return v.currencyCode !== _.first(this.models).currencyCode; }) !== undefined;
}

相关问题