2014-03-27 39 views
0

在单击相关的<a href>并且渲染了视图之后,可以向父代<li> -element添加类吗?我可以使用afterRender -functionBackboneJS - 在渲染后将类添加到单击的元素

我有这样一个观点:

function (App, Backbone) { 

    var Alphabet = App.module(); 
    var LetterView = Backbone.View.extend({ 
     template: 'alphabetlist', 
     tagName: 'li', 
     serialize: function() { 
      return this.model.toJSON(); 
     } 

    }); 

    Alphabet.View = Backbone.View.extend({ 
     tagName: 'ol', 
     className: 'alist', 
     initialize: function() { 
      this.listenTo(this.collection, 'all', this.render); 
      this.listenTo(this.collection, 'sync', this.onSync); 

      this.collection.fetch();   
     }, 

     beforeRender: function() { 
      var self = this; 

      this.collection.each(function(item) { 
       self.insertView(new LetterView({model: item})) 
      }) 
     } 
    }); 
    Alphabet.AlphabetCollection = Backbone.Collection.extend({ 
     url: 'js/json/AlphabetCollection.json' 
    }); 

    return Alphabet; 
} 

我的JSON文件看起来像:

[ 
{ 
    "name":"0-9", 
    "id":"1", 
    "url":"special" 
}, 
{ 
    "name":"A", 
    "id":"2", 
    "url":"a" 
}, 
{ 
    "name":"B", 
    "id":"3", 
    "url":"b" 
}, 
    ...etc. 

] 

和HTML模板:

<a href="#artists/{{url}}">{{name}}</a> 

我想要实现父母<li> -element变成某种“活动“类,因此它表示已经单击了哪个字母以及哪个名称以rleevant字母开头的组列表被显示。

有人可以帮我吗?

在此先感谢...

回答

0

它其实很简单,假设锚是LetterViewalphabetlist模板内:

var LetterView = Backbone.View.extend({ 
    template: 'alphabetlist', 
    tagName: 'li', 
    serialize: function() { 
     return this.model.toJSON(); 
    }, 
    events: { 
     'click a': 'onClick' 
    }, 
    onClick: function (e) { 
     e.preventDefault(); 
     this.$el.siblings('.is-active').removeClass('is-active'); 
     this.$el.addClass('is-active'); 
    } 
}); 
+0

其实这就是我预计也将工作,但因为新布局/页面被点击后(我使用layoutmanager)被渲染,这个解决方案根本没有效果! – SHT

+0

啊。如果视图在点击锚点后重新渲染,那么您需要存储模型的“拾取”状态,以便在重新渲染时可以恢复“活动”标志。 [Backbone.picky](https://github.com/derickbailey/backbone.picky)可以帮助解决这个问题。 – bejonbee

相关问题