我开始使用把手和架构模式模型 - 视图 - 视图模型和我写了这个代码:减少代码的使用Handlebars.js
var data = {
currentPlayer: this._model.currentPlayer,
line: [
{
row:
[
{
caseNumber:1,
caseValue: this._model.getCaseState(0,0)
},
{
caseNumber:2,
caseValue: this._model.getCaseState(0,1)
},
{
caseNumber:3,
caseValue: this._model.getCaseState(0,2)
}
]
},
{
row:[
{
caseNumber:4,
caseValue:this._model.getCaseState(1,0)
},
{
caseNumber:5,
caseValue:this._model.getCaseState(1,1)
},
{
caseNumber:6,
caseValue:this._model.getCaseState(1,2)
}
]
},
{
row:[
{
caseNumber:7,
caseValue:this._model.getCaseState(2,0)
},
{
caseNumber:8,
caseValue:this._model.getCaseState(2,1)
},
{
caseNumber:9,
caseValue: this._model.getCaseState(2,2)
}
]
}
]
};
var htmlContent = this._template(data);
this._element.html(htmlContent);
用下面的模板:
<div>
<h3>It is to player {{currentPlayer}}</h3>
<table>
{{#each line}}
<tr>
{{#row}}
<td data="{{caseNumber}}" class="case{{caseValue}}">{{caseValue}}</td>
{{/row}}
</tr>
{{/each}}
</table>
</div>
这段代码工作正常,但我问我是否不能减少它。所以我试图在var数据中使用for循环,但我意识到我无法做到这一点。 我的另一个选择就是在这样的模板,如果使用:通过测试VAR caseValue
的价值
{{#each line}}
<tr>
{{#row}}
{{#if caseValue}}
<td data="{{caseNumber}}" class="case{{caseValue}}">O</td>
{{else}}
<td data="{{caseNumber}}" class="case{{caseValue}}">X</td>
{{/if}}
{{/row}}
</tr>
{{/each}}
。但是,由于caseValue
取值为1
或0
或undefined
,如果未检查大小写,则所有单元格均填充“X”。 因此,我无法找到一个紧凑的解决方案,其目的是:
- 开始时,所有的TD标签都是空的。
- 取决于
getCaseState
的值,该值返回0
或1
填充 具有“X”或“O”的单元格。
编辑:我管理的getCaseState
不同的值与此代码:
Handlebars.registerHelper('displayTd', function(data) {
var result;
if(data.caseValue === undefined) {
result = '<td data="' + data.caseNumber + '"></td>';
return new Handlebars.SafeString(result);
} else if(data.caseValue === 1) {
result = '<td data="' + data.caseNumber + '" class="case' + data.caseValue + '">X</td>';
return new Handlebars.SafeString(result);
} else {
result = '<td data="' + data.caseNumber + '" class="case' + data.caseValue + '">O</td>';
return new Handlebars.SafeString(result);
}
});
谢谢你很多关于你很大的帮助(和修复我的英语错误^^)。我从来没有想过数据建设的解决方案。对于我的模板中的条件,我试过这个:[看我的编辑],但你的解决方案看起来更好。 – Lodec