2012-10-24 48 views
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 

我在想什麼?

+0

我不熟悉這個語法。它是哪種語言? – Naor

+0

Coffeescript。 http://coffeescript.org/ – user577808

+0

你如何將'Login'視圖添加到主DOM?你可以添加代碼如何做到這一點? –

回答

2

看起來,儘管您在視圖中設置了焦點,但當您將登錄視圖附加到主DOM時,焦點被重置(它不再被聚焦)。嘗試:

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

使用jQuery調用對焦方法您所附加的Login視圖到主DOM後。這肯定會起作用。

或者,您可以將'#main'作爲el傳遞給Login視圖本身。像:

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

然後你不需要添加代碼到路由器,你的初始代碼應該工作。

+0

奇怪的是,即使在這個視圖中渲染了所有內容,並且我在開發人員控制檯中執行了上述操作,仍然無法正常工作。任何想法爲什麼這可能是?似乎對我懷疑。 – user577808

+0

使用開發人員控制檯進行調試時,焦點由控制檯窗口本身執行。所以焦點不在文本框上設置。 –

+0

哎呀。是的,上面的剪輯工作。我只是希望把這樣的東西從路由器中排除出去,因爲它似乎並不是我的問題。 – user577808

0

郵政是非常古老的,但我仍然想在這裏回答,因爲它可能有助於某人。有一些更好更簡單的方法。我們可以使用onDomRefresh事件來設置焦點。 onDomRefresh事件將在視圖渲染,顯示和重新渲染時隨時調用。 我們可以用它如下:

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

希望這可以幫助別人。

+0

onDomRefresh僅適用於木偶,但不是嗎? –