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()

ログインが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 に答える