Javascript 带有数组的Mustache.js,最后一项除外
//需要=>multi:option1;选择2;选项3结尾无分号和空格Javascript 带有数组的Mustache.js,最后一项除外,javascript,mustache,Javascript,Mustache,//需要=>multi:option1;选择2;选项3结尾无分号和空格 var template = "multi: {{#answerVOs}}{{answer}}; {{/answerVOs}}"; 我需要显示数组中的最后一项,不带分号和空格 编辑:PHP代码 var json = { "answerVOs": [ { "answer" : "option 1" }, { "answer" : "option 2" }, { "answer" : "option 3"
var template = "multi: {{#answerVOs}}{{answer}}; {{/answerVOs}}";
我需要显示数组中的最后一项,不带分号和空格
编辑:PHP代码
var json = {
"answerVOs": [
{ "answer" : "option 1"
},
{ "answer" : "option 2"
},
{ "answer" : "option 3"
}
]
};
document.getElementById("answers").innerHTML = Mustache.to_html(template, json);
根据Github页面上的Mustache.js文档,可以将函数传递到数据中,并使用模板标记调用它。因此,您可以做如下操作:注意,此代码未经测试:
class ChoiceVO extends \ValueObject {
public $id;
public $question;
public $answer;
public $answerformat;
public $fraction;
public $feedback;
public $feedbackformat;
public $replace = "function () { var result = ''; for( var i = 0; i < this.answers.length; i++ ) { result += this.answers[i].answer + (i !== this.answers.length - 1 ? '; ' : '');}return result;}";
function __construct($args=null) {
parent::__construct($args);
}
}
经过一些反馈
要在解析JSON后添加函数,请执行以下操作:
var template = 'multi: {{listAnswers}}';
var context = {
answers: [
{ answer: 'Answer 1' },
{ answer: 'Answer 2' },
{ answer: 'Answer 3' }
],
listAnswers: function () {
var result = '';
for( var i = 0; i < this.answers.length; i++ ) {
result += this.answers[i].answer + (i !== this.answers.length - 1 ? '; ' : '');
}
return result;
}
};
document.getElementById('answers').innerHTML = Mustache.render(template, context);
感谢Jon的回答,我一直在寻找基于函数的解决方案,但现在的问题是JSON是从PHP生成的,如果我添加一个函数,它将以字符串的形式出现,例如listAnswers=function{/*…*/};
var json = '{"answers":[{"answer":"Answer 1"},{"answer":"Answer 2"},{"answer":"Answer 3"}]}'; // Server response
var context = JSON.parse(json); // JSON parsed to JavaScript Object
// Add method in JavaScript, NOT PHP.
context.listAnswers = function () {
var result = '';
for( var i = 0; i < this.answers.length; i++ ) {
result += this.answers[i].answer + (i !== this.answers.length - 1 ? '; ' : '');
}
return result;
};
document.getElementById('answers').innerHTML = Mustache.render(template, context);