0

我有一个带有登录表单的视图,并且我试图在呈现视图后设置焦点。我试过这个,但没有奏效:

class App.Views.Login extends Backbone.View
  template: template("login")

  events:
    "click button": "login"

  render: ->
     @$el.html @template(@)
     @$el.find("#email").focus()

也试过这个;

class App.Views.Login extends Backbone.View
  template: template("login")

  events:
    "click button": "login"

  render: ->
     @$el.html(@template(@)).ready =>
       @$el.find("#email").focus()

添加了路由器以显示如何将 Login 附加到 DOM:

class App.Routers.App extends Backbone.Router
  initialize: ->
    chrome = new Spokely.Views.Chrome el: $("#app")
    chrome.render()
    @mainEl = $("#main")

  routes:
    "": "index"
    "ad/:id": "show"
    "about": "about"
    "login": "login"
    "signup": "signup"

  login: ->
    view = new Spokely.Views.Login()
    @mainEl.html view.render().el

我错过了什么?

4

2 回答 2

2

似乎虽然您在视图中设置了焦点,但是当您将登录视图附加到主 DOM 时,焦点被重置(不再聚焦)。尝试:

login: ->
    view = new Spokely.Views.Login()
    @mainEl.html view.render().el    
    $("#email").focus()

Login将视图附加到主 DOM后,使用 Jquery 调用 focus 方法。这肯定会奏效。

或者,您可以将“#main”作为 el 传递给登录视图本身。喜欢:

login: ->
        view = new Spokely.Views.Login el: $("#main")
        view.render()

然后你不需要向路由器添加代码,你的初始代码应该可以工作。

于 2012-10-24T14:41:59.623 回答
0

帖子很旧,但我仍然想在这里回答,因为它可能会对某人有所帮助。有更好更简单的方法。我们可以使用 onDomRefresh 事件来设置焦点。onDomRefresh 事件将在视图被渲染、显示然后重新渲染时调用。我们可以如下使用它:

onDomRefresh:function(){
  @$el.find("#email").focus()
}

希望这可以帮助某人。

于 2014-04-17T09:08:38.543 回答