繁体   English   中英

在Backbone.View的委托事件中寻找渲染事件

[英]Looking for render event in delegateEvents in Backbone.View

我对Backbone.View及其delegateEvents有一个疑问。 您可以在此处阅读有关extend方法的文档。 使用此方法,您可以“重写渲染功能,指定声明性事件”等。

我有一个关于声明性事件委托 事件的问题(不确定如何调用它)。 它们在这里描述。 这是一个示例:

  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 ,所以不起作用:/

也许在视图内的initialize函数中,您可以在渲染中包含一个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);
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触发器触发

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

或在您的视野之外

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM