0

私はシンプルな Ember アプリを持っていますが、{{action}} を動作させるのに 5 時間かかりましたが、うまくいきませんでした。考えられることはすべて3回試しましたが、行き詰まりました。私は最小限のルーターを持っています。{{outlet}} にデフォルトで表示される index.handlebars と、価格設定ページへのリンクがあり、クリックすると価格設定ページに遷移します。価格設定ページで、PricingController に対応するメソッドを持つ {{action showMessage}} を含めるようにしました。Chrome の ember-extention を見ると、PricingController が実際にビューに関連付けられていることがわかります。しかし、メソッドが呼び出されることはありません。他に何を試すべきか本当にわかりません。

application.handlebars:

<div class='navbar navbar-inverse navbar-fixed-top'>
  <div class='navbar-inner'>
    <div class='container'>
      <div class='nav-collapse collapse'>
        <ul class='nav'>
          <li>{{#linkTo 'pricing'}}Prijzen{{/linkTo}}</li>
        </ul>
      </div>
    </div>
  </div>
</div>
<div class='container' id='main'>
  <div class='content'>
    <div class='row'>
      <div class='span12'>
        <div class='page-header'></div>
        {{outlet}}
      </div>
    </div>
  </div>
</div>

App.Router.map(function() {
  this.route('pricing');
});


App.ApplicationRoute = Ember.Route.extend({
});


App.PricingRoute = Ember.Route.extend({
});

価格.ハンドルバー:

<h1>some text</h1>
<a href="#" {{action showMessage}} class='btn btn-primary btn-large'>order</a>
<button {{action showMessage}}></button>

App.PricingController = Ember.Controller.extend({
  showMessage: function() {
    toastr.info('info');
  }
});
4

2 に答える 2

0

コードは最新のemberRCjsとhandlebarsrc3で正しく機能しています。どのバージョンの残り火とハンドルバーを使用していますか?

于 2013-02-28T14:38:01.427 に答える
0

JS コンソールで手がかりを確認できますか。私の推測では、これは「showMessage が処理されませんでした」というエラーをスローするはずです。これは、デフォルトで {{action}} ヘルパーがコントローラーではなく現在のルートをターゲットにしているためです。

showMessage関数をルート上のイベントオブジェクトに移動することができます

App.PricingRoute = Ember.Route.extend({
  events: {
    showMessage: function() {
      toastr.info('info');
    }
  }
});

または、アクションのターゲットをコントローラーに設定します

<a href="#" {{action showMessage target="controller"}}>Show</a>
于 2013-02-28T12:54:39.493 に答える