次のように、サーバーからモデルのコレクションを取得しました。
ビューの最初のモデルのみをレンダリングしたいのですが、レンダリングされたビューでユーザーがボタンをクリックすると、コレクションから次のモデルが順番にレンダリングされます。
ビュー全体をレンダリングしてから表示/非表示にすることはできません。これらはクイズの質問であり、人々はおそらくそのようにカンニングする方法を理解するでしょう!
私の現在の見解:
define([
'domLib',
'underscore',
'backbone',
'router',
'config',
'collection/quiz',
'text!template/quiz.html'
],
function($, _, Backbone, Router, AppConfig, QuestionList, QuizTemplate) {
var QuizView = Backbone.View.extend({
el: '[data-view="main-content"]',
template: _.template(QuizTemplate),
initialize: function onInitialize(param){
this.collection = new QuestionList();
this.collection.fetch({
reset: true,
data: {
categoryId: param.id || AppConfig.constants.CATEGORY,
limit: AppConfig.constants.QLIMIT
}
});
this.collection.bind('reset', this.render, this);
},
render: function onRender(){
this.$el.html(this.template({questions: this.collection.toJSON()}));
}
});
return QuizView;
});
私のコレクション; base64 デコードは、サーバーからのエンコードされた応答をデコードするためにあります。
define([
'domLib',
'underscore',
'backbone',
'router',
'config',
'model/quiz'
],
function($, _, Backbone, Router, AppConfig, Quiz) {
var QuestionList = Backbone.Collection.extend({
model: Quiz,
url: AppConfig.api.game.quiz,
parse: function onParse(response){
var self = this;
_.each(response, function(obj, index){
_.each(obj, function(val, key, list){
if(key !== 'id'){
obj[key] = self.decode64(val);
}
});
self.push(obj);
});
return this.models;
},
decode64: function onDecode(data){
var b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
var o1, o2, o3, h1, h2, h3, h4, bits, i = 0,
ac = 0,
dec = '',
tmp_arr = [];
if (!data) {
return data;
}
data += '';
do { // unpack four hexets into three octets using index points in b64
h1 = b64.indexOf(data.charAt(i++));
h2 = b64.indexOf(data.charAt(i++));
h3 = b64.indexOf(data.charAt(i++));
h4 = b64.indexOf(data.charAt(i++));
bits = h1 << 18 | h2 << 12 | h3 << 6 | h4;
o1 = bits >> 16 & 0xff;
o2 = bits >> 8 & 0xff;
o3 = bits & 0xff;
if (h3 == 64) {
tmp_arr[ac++] = String.fromCharCode(o1);
} else if (h4 == 64) {
tmp_arr[ac++] = String.fromCharCode(o1, o2);
} else {
tmp_arr[ac++] = String.fromCharCode(o1, o2, o3);
}
} while (i < data.length);
dec = tmp_arr.join('');
return dec;
}
});
return QuestionList;
});