2012-04-19 2 views
3

백본보기에서 jQuery 코드를 적용 할 경우 : 내가 할 때나는 다음과 백본보기가

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

내가 가진 문제가 있음 :. $은 ('# 사용자 이름') (초점); : 렌더링시 : usernameFocus : 이벤트가 아직 첨부되지 않았습니다. 내가 생각할 수있는 유일한 두 가지 해결책이 있습니다.

  1. 사용의 setTimeout는 - 완전히 백본 그냥 보이는 제공하는 이벤트 시스템을 바이 패스 할 이렇게 -이 옵션이 작동 기술적 것 동안, 나는 그것을
  2. 수동으로 렌더링에서 이벤트를 적용 진정한 옵션을 고려하지 않는다 기묘한.

모든 이벤트가 적용된 후에 백본에서 jQuery 코드를 실행할 수 있습니까?

답변

1

포커스 설정 코드 이전에 이벤트에 매핑 된 이벤트 핸들러를 얻는 간단한 방법 중 하나는 Backbone 자체에서 제공하는 것과 동일한 바인딩 코드를 호출하는 것입니다. 다음과 같이 전화하여

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

으로 전화하여 원하는 효과를 얻을 수 있어야합니다.

+0

이것은 또한 작동하고 내 원래의 질문에 더 감사합니다, 감사합니다. – ryanzec

1

실제로보기의 렌더링 방법에서 코드를 이동하여 실제로보기를 생성하는 라우터의 메서드로 옮겼습니다. 그래도이 코드는 더 나은 곳인 것처럼 보입니다.

+0

여러보기가있을 수 있고 개별보기 외부의 항목이 중점을 두어야 할 중재자 여야하기 때문에이 경우 좋은 대답입니다. 그러나 그것은 원래 질문에 답하지 않으므로 아래에서 그 질문에 대한 간단한 설명을 드리겠습니다. –