2015-11-11 26 views
0

我有一個關於Backbone.View及其delegateEvents的問題。你可以閱讀here的文檔extend方法。使用這種方法,你可以「覆蓋渲染功能,指定您的聲明事件」尋找渲染事件在代理事件Backbone.View

我有一個問題關於聲明事件delegateEvents(不知道我應該怎麼稱呼它)。它們被描述爲here。這裏是一個例子:

var DocumentView = Backbone.View.extend({ 
    events: { 
    "dblclick"    : "open", 
    "click .icon.doc"   : "select", 
    "contextmenu .icon.doc" : "showMenu", 
    "click .show_notes"  : "toggleNotes", 
    "click .title .lock"  : "editAccessLevel", 
    "mouseover .title .date" : "showTooltip" 
    },  
    open: function() { 
    window.open(this.model.get("viewer_url")); 
    }, 
    select: function() { 
    this.model.set({selected: true}); 
    }, 
    ... 
}); 

正如您所看到的,您可以在模板DOM中的特定對象上添加不同的事件。像clickmouseover。所以,有這個模板:

<foo></foo> 
{#myplayers} 
<player class="normal" value="{player}" style="{style}"></player> 
{/myplayers} 

您可以在每一個球員添加不同click事件,像這樣:

events: { 
     'click player': 'playerClick' 
    }, 
    playerClick: function(e) { 
     var playerValue = e.currentTarget.getAttribute('value'); 
     // HERE: e.currentTarget I've particular player 

    } 

我的問題:我可以宣佈在類似的方式,單擊事件呈現事件?我想捕捉單個玩家(不是整個列表)呈現的事件。我需要得到e.currentTarget那裏,並改變它的CSS一點點。

我正在尋找這樣的事情:

events: { 
    'render player': 'playerRendered' 
}, 
playerRendered: function(e) { 
    var playerValue = e.currentTarget.getAttribute('value'); 
    // HERE: e.currentTarget I've particular player 

} 

我怎樣才能做到這一點?因爲代理事件中的render不起作用:/

回答

0

也許在視圖中的初始化函數中,您可以使用渲染器來偵聽listenTo。類似的東西:

var view = Backbone.View.extend({ 
    className: 'list-container', 
    template: _.template($('#my-template').html()), 
    initialize: function() { 
     this.listenTo(this, 'render', function() { 
     console.info('actions');   
     }); 
    }, 
    render: function() { 
     this.$el.html(this.template(this)); 
     return this; 
    }, 
}); 

然後:

var myView = new view(); 
myView.render(); 
myView.trigger('render'); 
$('#container').html(myView.el); 
0
var View = Backbone.View.extend({  
    events: { 
    'render .myselector': 'playerRendered' 
}, 
playerRendered: function(e) { 
    console.log("arguments"); 
    var playerValue = e.currentTarget.getAttribute('value'); 
    // HERE: e.currentTarget I've particular player 

}, 
render:function(){ 

    console.log("render"); 
this.$el.html("<div class='myselector'></div>"); 
} 
}); 
var view = new View(); 
view.render(); 

,您可以用Jquery trigger

this.$(".myselector").trigger("render"); 

或視圖之外觸發

view.$(".myselector").trigger("render");