片側にアイテムのリスト、もう一方に選択したアイテムの詳細を表示するシンプルな画面を作成したい。ユーザーが項目の 1 つをクリックすると、その詳細が「詳細」セクションに表示されます。また、「リスト」セクションで選択したアイテムは、「アクティブ」クラスで装飾する必要があります。ここに私のルーターコードがあります:
var AppRouter = Backbone.Router.extend({
routes:{
"":"list",
"users/:id":"userDetails"
},
list:function () {
this.usersList = new UsersCollection(usersList);/* new UsersCollection()*/
var self = this;
//this.userList.fetch({
// success: function () {
this.UsersListView = new UsersListView({ model: this.usersList });
$('#sidebar').html(this.UsersListView.render().el);
// }
//})//end of fetch
},
userDetails:function (id) {
if(this.usersList){
//unselect prevously selected
if(this.user )this.user.set({'selected':false});
this.user = this.usersList.get(id);
//select current
this.user.set({'selected':true});
//empty refill the items section
this.UsersListView = new UsersListView({ model: this.usersList });
$('#sidebar').empty().html(this.UsersListView.render().el);
if (this.UserDetailsView) this.UserDetailsView.close();
this.UserDetailsView = new UserDetailsView({model:this.user});
$('#content').html(this.UserDetailsView.render().el);
}
else{
}
}
});
これまでのところ、アイテムセクションのhtmlを空にして再入力することで、「アクティブな」アイテムクラスを設定することができました。(ノックアウトjsのように)「選択された」プロパティを観察する方法はありますか?変更すると、変更がhtmlに表示されますか?
ビューコード:
window.UserListItemView = Backbone.View.extend({
tagName:"li",
template:_.template($('#tpl-user-list-item').html()),
render:function (eventName) {
if(this.model.get('selected')){$(this.el).addClass('active');}
$(this.el).html(this.template(this.model.toJSON()));
return this;
}
});
よろしくお願いします