を呼び出す関数の値をレンダリングしませんMustacheJSは、私は、単純なMustacheJSテンプレートを持っている他の機能
var data = {
votes: {
total: function() {
return this.voters.men.length + this.voters.women.length + this.voters.unknown.length;
//return this.votes.men() + this.votes.women() + this.votes.unknown();
},
men: function() {
return this.voters.men.length;
},
women: function() {
return this.voters.women.length;
},
unknown: function() {
return this.voters.unknown.length;
}
},
voters: {
men: [
"hpiotrekh",
"goferek",
"Carlos_Irwin_Estevez",
"Nemezis_"
],
women: [],
unknown: [
"komurczak",
"PLDami"
]
}
}
var template = $('#myTpl').html();
var html = Mustache.to_html(template, data);
$('#container').html(html);
における場合ときに、第2のreturn文でvotes.total関数はコメントされており、関数のすべての関数が最初に返されます。しかし、それが所属するオブジェクトの関数を使用する2番目のreturnステートメントを使用しようとすると、コードはレンダリングされません。
理由を理解できません。
ライブデモhttps://jsfiddle.net/bxgnd7ch/
ただ、第四行とコメント解除5日コメント。
ことがあります少し複雑ですが、私はそれをゆっくり理解しています。上記のコードはテンプレートの一部です。テンプレートに渡すオブジェクト投票者も必要です。だから私はそれをデータオブジェクトから除外することはできません。それとももっと洗練された方法がありますか? – mrJoe
また、total関数でthis.votes.men.call(this)を使用してコンテキストを 'data'とバインドすることができます デモ: https://jsfiddle.net/bxgnd7ch/4/ –
これは良い方法です。 'votes'オブジェクト内で 'this'を呼び出すことは、 'data'オブジェクトをオーバーライドすることを意味するのは奇妙なことではありませんか? – mrJoe