我有以下主干观点:

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');
        }
    }
});

我的问题是,当我这样做时:$('#username')。focus();渲染中的:表示尚未附加:usernameFocus:事件。我只能想到两种解决方案。
  • 使用setTimeout-虽然此选项在技术上可行,但我认为它不是真正的选项
  • 在渲染中手动应用事件-这样做将完全绕过Backbone提供的事件系统,这似乎很奇怪。

  • 在应用了所有事件之后,Backbone是否提供了一种运行jQuery代码的方法?

    最佳答案

    将事件处理程序映射到焦点设置代码之前的事件的一种简单方法是调用Backbone本身提供的相同绑定(bind)代码。您应该可以致电:

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

    在初始化中并获得所需的效果。

    关于javascript - 何时在 Backbone View 中应用jQuery代码,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10225005/

    10-11 05:17