0

私は自分のhtmlページにこのコードを持っています:

<script type="text/x-handlebars" data-template-name="logged">
    <h1>Page</h1>
          {{view.name}}
        {{#view App.LoginButton}}
          <button type="button">This is a clickable area!</button>
        {{/view}}
        
</script>

そして、jsスクリプトに次のコードがあります:

App=Ember.Application.create();
App.Route= Ember.Route.extend({
  events: {
   /* turnItUp: function(level){
      alert("ee");
    }*/
  }
});

App.Router.map(function() {
    this.resource('logged', {path: '/'});
});

App.LoginButton= Ember.View.extend({
  click: function(evt) {
   this.get('controller').send('turnItUp', 11); 
  }
});
App.PlaybackController = Ember.Controller.extend({
 events:{
  turnItUp: function(level){
    alert(level);
  }
}
});

ボタンをクリックすると、次のエラーが表示されます。

キャッチされていないエラー: イベント 'turnItUp' を処理したものはありません。

なぜ?

4

2 に答える 2

1

ボタンをクリックすると、次のエラーが表示されます。

Uncaught Error: Nothing handled the event 'turnItUp'.

どうして???

コントローラーもルートも turnItUp イベントを処理するように設定されていないためです。何が起こっているかは次のとおりです。

  1. ユーザーがボタンをクリックすると、App.LogginButton.click()
  2. click()- おそらくあなたが期待するものではない -get('controller')を返す呼び出し。<(generated logged controller)>
  3. click()turnItUpに送る<generated logged controller>
  4. <generated logged controller>メソッドがないturnItUpため、現在のルートに委譲します
  5. turnItUp現在のルートまたはその親のいずれにもイベントがないため、エラーが表示されます

したがって、将来このようなことをデバッグするために、コンソールログを追加して、コントローラーが本来あるべきものであることを確認してください。

App.LoginButton= Ember.View.extend({
  click: function(evt) {
    console.log('controller: ', this.get('controller').toString());
    this.get('controller').send('turnItUp', 11); 
  }
});

もう 1 つ変更する必要があるのは、コントローラー イベントをeventsプロパティの下にネストしてはならないということです。これは単にルートのためです。したがって、物事を機能させるには、これを試してください:

App.LoggedController = Ember.Controller.extend({
  turnItUp: function(level){
    alert(level);
  }
});
于 2013-04-23T18:17:33.843 に答える
0

あなたが探しているものは、ember のアクションと呼ばれます

http://emberjs.com/guides/templates/actions/

http://emberjs.com/api/classes/Ember.Handlebars.helpers.html#method_action

<button {{action turnItUp 11}}>This is a clickable area!</button>

App.PlaybackController = Ember.Controller.extend({
  turnItUp: function( value ){
    alert(value);
  }
})

(PalyBackController がビューの現在のコントローラーであると仮定します)

于 2013-04-23T14:50:25.847 に答える