0

backbone.jsビューのイベントを起動するときに問題が発生します。 #login-buttonをクリックすると、何も起こっていません。Backbone.jsイベントが発生しないと表示する

また、iCanHaz(http://icanhazjs.com/)を使用してテンプレートを読み込みます。私はあなたが正しく表示の 'エル' プロパティを使用していないと信じて

<script id="loginView" type="text/html"> 
     <div data-role="page" id="login" class="container"> 
      <div class="hero-unit"> 
       <div class="row-fluid"> 
        <div class="span12"> 
         <div class="form-horizontal"> 
         <fieldset> 
          <legend>Please login to continue</legend> 
          <div class="control-group"> 
          <label class="control-label" for="username">Username</label> 
          <div class="controls"> 
           <input type="text" class="input-xlarge" id="username"> 
          </div> 
          </div> 

           <div class="control-group"> 
          <label class="control-label" for="password">Password</label> 
          <div class="controls"> 
           <input type="password" class="input-xlarge" id="password"> 
          </div> 
          </div> 

           <div class="form-actions"> 
         <button id="login-button" class="btn btn-primary btn-large">Login</button> 
        </div> 
         </fieldset> 
         </div> 
        </div> 
       </div> 
      </div> 
     </div> 
    </script> 
+1

ログインビューテンプレートは実際に画面に表示されていますか? – Paul

+0

はい、コンソールエラーなしですべてが正常に動作しています。私はボタンをクリックし、イベントはトリガーされません。 – Dustin

答えて

4

私はそれを理解しました。バックボーンはイベントが作成される前にイベントにバインドしていました。非同期iCanHazコールのコールバックでは、this.setElement( '#login')を使用しました。これは完全に機能しました。 BACKBONE.JSのドキュメントから:

setElement [view.setElement(element)] 

「あなたはまた、キャッシュされた$エル参照を作成し、ビューの委任イベントを移動たのsetElementを使用し、異なるDOM要素にバックボーンビューを適用したい場合古い要素から新しい要素へ "

+0

ありがとう、これは私をすごく助けました! – ChrisMcKenzie

+0

'view.delegateEvents()'の呼び出しが必要な場合もあります。 –

-1

$(function() { 
var router = new App.Router; 
Backbone.history.start(); 
}); 

App.Router = Backbone.Router.extend({ 
routes: { 
    "login": "login" 
}, 

login: function() { 
    var view = new App.Views.LoginView; 
} 
}); 

App.Views.LoginView = Backbone.View.extend({ 

el: '#login', 

initialize: function() { 

    _.bindAll(this, 'render', 'validateLogin'); 
    this.render(); 

}, 

render: function() { 
    App.Stage.html(ich.loginView()); 
}, 

events: { 
    'click button#login-button' : 'validateLogin' 
}, 

validateLogin: function(event) { 
    console.log("validateLogin fired."); 
} 

}); 

はここに私のマークアップです(ICanHaz.jsを使用して):

は、ここに私のjavascriptのです。次のようにIDの代わりにプロパティをjQuery DOMオブジェクトで参照させてください:

App.Views.LoginView = Backbone.View.extend({ 

el: $('#login') 

... 
+0

運がありません。また、私はこの 'ログインのように私のルータでそれを設定してみました:{ \t \t(App.User.isLoggedIn){ \t \t \t window.location.hash = 'ホーム' であれば機能(); \t \t} else { \t \t \t var view = new App.Views.LoginView({el:$( '#login')}); \t \t} \t} 'イベントは発生せず、console.log(this.el)は未定義です。 – Dustin

+0

ああ、以前はこれが間違っていました。うまくいけばそれです:新しいログインビューを作成するときは、それをそのまま(関数ではなくプロパティで)呼び出さなければなりません。試してみてください:var view = new App.Views.LoginView(); – Whoa

+0

それはしませんでした。 – Dustin

関連する問題