MustacheJS 不渲染调用其他函数的函数的值
MustacheJS doesn't render values of functions calling other functions
我有一个简单的 MustacheJS 模板:
<script id="myTpl" type="text/template">
<div id="metrics">
<div>
<p>Votes: {{ votes.total }}</p>
<p>Men: {{ votes.men }}</p>
<p>Women: {{ votes.women }}</p>
<p>Unknowns: {{ votes.unknown }}</p>
</div>
</div>
</script>
<div id="container">
</div>
还有一个JavaScript代码:
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);
在 votes.total 函数中的第二个 return 语句被注释的情况下,我们使用该函数的第一个 return 一切正常。但是当我尝试使用第二个 return 语句,该语句使用它所属对象的函数时,代码不会呈现。
我不明白为什么。
现场演示https://jsfiddle.net/bxgnd7ch/
只需注释第 4 行并取消注释第 5 行。
此错误由函数上下文更改引起,实际问题是您正在通过调用方调用对象函数this.votes
总计()函数
this.voters.men.length + this.voters.women.length + this.voters.unknown.length;
上下文 this
指向 data
问题是:
return this.votes.men() + this.votes.women() + this.votes.unknown()
你调用了 this.votes.men()
调用者 this.votes
,上下文 this
指向 data.votes
所以 men/women/unknown 函数中的上下文
this === data.votes
这就是为什么当 men() 函数试图访问
this.voters.men.length
它实际上正在访问 data.votes.voters.men.length
但您希望访问 data.voters.men.length
所以这导致了错误。
解决方案:
尝试从 data
对象中提取 voters
,
如果你真的必须在对象函数内部调用对象函数
我有一个简单的 MustacheJS 模板:
<script id="myTpl" type="text/template">
<div id="metrics">
<div>
<p>Votes: {{ votes.total }}</p>
<p>Men: {{ votes.men }}</p>
<p>Women: {{ votes.women }}</p>
<p>Unknowns: {{ votes.unknown }}</p>
</div>
</div>
</script>
<div id="container">
</div>
还有一个JavaScript代码:
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);
在 votes.total 函数中的第二个 return 语句被注释的情况下,我们使用该函数的第一个 return 一切正常。但是当我尝试使用第二个 return 语句,该语句使用它所属对象的函数时,代码不会呈现。
我不明白为什么。
现场演示https://jsfiddle.net/bxgnd7ch/
只需注释第 4 行并取消注释第 5 行。
此错误由函数上下文更改引起,实际问题是您正在通过调用方调用对象函数this.votes
总计()函数
this.voters.men.length + this.voters.women.length + this.voters.unknown.length;
上下文 this
指向 data
问题是:
return this.votes.men() + this.votes.women() + this.votes.unknown()
你调用了 this.votes.men()
调用者 this.votes
,上下文 this
指向 data.votes
所以 men/women/unknown 函数中的上下文
this === data.votes
这就是为什么当 men() 函数试图访问
this.voters.men.length
它实际上正在访问 data.votes.voters.men.length
但您希望访问 data.voters.men.length
所以这导致了错误。
解决方案:
尝试从 data
对象中提取 voters
,
如果你真的必须在对象函数内部调用对象函数