我有以下主干视图:
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 代码的方法?