たとえば、次のテンプレートを見てみましょう。
<div class="picture">
<img src="<%= model.get("url") %>"></img>
<p class="author"><%= model.get("author") %></p>
<p class="date"><%= model.get("date") %></p>
<div class="likers"><%= some logic that outputs a nice list of people that have liked this picture %></div>
<button class="like-button <%= model.get("is_liked") ? 'active' : '' %>"><%= model.get("is_liked") ? 'You liked this picture' : 'Click here to like this picture' %></button>
</div>
バックボーンを使用してそのテンプレートをレンダリングし、「いいね」ボタンをクリックすると、次の関数がトリガーされるとします。
オプションA:
var me = "Peeter";
var model; //refrence to the model
var likers = model.get("likers");
model.get("is_liked") ? likers.remove(me) : likers.add(me); //Add/remove me
model.set({
"is_liked" : !model.get("is_liked"), //Toggle state
likers : likers
});
var $button = $(".like-button")
var $likers = $(".likers");
$button.toggleClass("active");
$button.hasClass("active") ? $button.text('You liked this picture') ? $button.text('Click here to like this picture');
$likers.text(/* copy/paste the logic that's in the template to render the list of likers*/);
オプションB:
var me = "Peeter";
var model; //refrence to the model
var template; //refrence to the template declared at the top of this question
var likers = model.get("likers");
model.get("is_liked") ? likers.remove(me) : likers.add(me); //Add/remove me
model.set({
"is_liked" : !model.get("is_liked"), //Toggle state
likers : likers
});
template.render();
どの方法をお勧めしますか?なんで?また、モバイルブラウザを考慮に入れてください。テンプレート全体の再レンダリング(テンプレートが少し大きかった場合)は、モバイルデバイスで少し遅すぎますか?