1

文字列「score20130901」の代わりに変数を使用したいのですが、文字列を次のコードに置き換えると、時々 (非常に頻繁に) 次のエラーが表示されます。

同じ JavaScript ファイル内の他のテンプレートでこのメソッドを使用していますが、機能します。しかし、このテンプレートにはありません。ページの読み込みが遅すぎるか、コレクションが完全に読み込まれていないと思います。

新しい JavaScript (ここでは、score20130901 を test に置き換えたい)

Template.voting.books = function () {
    var flag = Flags.findOne({_id: "bookflag"});
    test = flag && flag.currentflag;
    //alert(test);

    var books = Books.find({flag: "score20130901"}).fetch();
    return _.sortBy(books, function (book) {
        return _.reduceRight(book.score20130901, function (memo, num) {
            return memo + num;
        });
    }).reverse();
}; 

データベース:

Flags.insert({
_id: "bookflag",
currentflag: "score20130901"
});

.


.

もう1つの問題は、文字列に [i] のような配列がある場合、同じ文字列を変数に置き換えようと必死になっていることです。

JavaScript:

Template.book.totalscore = function () {
    var flag = Flags.findOne({_id: "bookflag"});
    test = flag.currentflag;

    var total = 0;
    for (var i=0; i<5; i++) {
        total += this.test[i];
    }
    return total;
};  
4

2 に答える 2

2

これを試して:

Template.voting.books = function () { 
    var flag = Flags.findOne({_id: "bookflag"}); 

    if (typeof flag !== 'undefined') { 
        var books = Books.find({flag: flag.currentflag}).fetch(); 
        return _.sortBy(books, function (book) { 
            return _.reduce(book[flag.currentflag], function (memo, num) { 
                return memo + num; 
            }); 
        }).reverse(); 
    }
    else return []; 
};

2 番目の部分については、次のとおりです。

Template.book.totalscore = function () {
    var flag = Flags.findOne({_id: "bookflag"});

    if (typeof flag !== 'undefined') { 
        return _.reduce(this[flag.currentflag], function (memo, num) { 
            return memo + num; 
        });
    }
    else return 0;
}; 
于 2013-08-28T12:23:30.817 に答える
0

あなたは正しいかもしれません!接続によって、データベースのダウンロードがまだ完全に行われていない可能性があります。したがって、フラグの結果はありません。

あなたがする必要があるのは、ケースを処理することだけflagですnull

Template.voting.books = function () {
    var flag = Flags.findOne({_id: "bookflag"});


    test = flag && flag.currentflag;
    return Books.find({flag: test}, {sort: {totalscore: -1, _id: 1}});
}; 

2番目のケースの場合:

Template.book.totalscore = function () {
var flag = Flags.findOne({_id: "bookflag"});
test = flag && flag.currentflag;
var total = 0;

if(test) {
    for (var i=0; i<5; i++) {
        total += this.test[i];
    }
}
return total;

};  
于 2013-08-27T21:45:07.867 に答える