Javascript 何时在主干视图中应用jQuery代码

Javascript 何时在主干视图中应用jQuery代码,javascript,jquery,javascript-events,backbone.js,Javascript,Jquery,Javascript Events,Backbone.js,我的看法如下: core.views.Login = Backbone.View.extend( { el: '#main-content-wrapper', events: { 'focus #username': 'usernameFocus', 'blur #username': 'usernameBlur' }, initialize: function() { this.render()

我的看法如下:

core.views.Login = Backbone.View.extend(
{
    el: '#main-content-wrapper',

    events:
    {
        'focus #username': 'usernameFocus',
        'blur #username': 'usernameBlur'
    },

    initialize: function()
    {
        this.render();
    },

    render: function()
    {
        var html = unlocked.renderTemplate('login', 'core');
        this.$el.empty().html(html);

        $('#username').focus();

        return this;
    },

    usernameFocus: function(event)
    {
        console.log('focus');
        if($(event.target).val() == 'Username')
        {
            $(event.target).val('');
        }
    },

    usernameBlur: function(event)
    {
        if($(event.target).val() == '')
        {
            $(event.target).val('Username');
        }
    }
});
我遇到的问题是,当我这样做时:$(“#用户名”).focus();:在渲染中:usernameFocus:事件尚未附加。我能想到的解决办法只有两个

  • 使用SETTIMEOUT——虽然这个选项在技术上是可行的,但我不认为它是一个真正的选项
  • 在渲染中手动应用事件-这样做会完全绕过主干提供的事件系统,这看起来很奇怪

  • 主干网是否为我提供了一种在应用所有事件后运行jQuery代码的方法?

    实际上,我刚刚将该代码从视图的渲染方法中移到了路由器的方法中,该方法实际上生成了视图,而且似乎对它来说是一个更好的地方。

    一种简单的方法,可以将事件处理程序映射到之前的事件重点设置代码是调用主干本身提供的相同绑定代码。您应该能够拨打:

    this.delegateEvents();
    this.render();
    

    在您的视图中,初始化并获得所需的效果。

    在这种情况下,这是一个很好的答案,因为您可能有多个视图,并且单个视图之外的内容可能是其中一个应获得焦点的仲裁者。但是,这并不能回答你原来的问题,所以我想我会在下面快速地回答这个问题。这也很有效,并且更好地回答了我原来的问题,谢谢。