1

Ember を更新したばかりで、古いアプリを新しいルーター API に変換しようとしています。

私のテンプレートにはこれがあります:

<button {{ action "createNewApp" }} class="btn btn-primary">Create application</button>

そして、ルートに createNewApp を配置しました。

App.CreateAppRoute = Ember.Route.extend({
    renderTemplates: function() {
        this.render({ outlet: 'content'});
    },
    createNewApp: function(){
        console.log("It's clicked");
    }
});

ただし、ボタンをクリックしても関数は呼び出されません。イベントのターゲットをコントローラーに変更しようとしましたが、まだ機能していません。これはバグですか、それとも何か間違っていますか?

4

1 に答える 1

1

ルーターの events プロパティの関数を使用するか (sly7_7 に感謝)、コントローラーの関数を使用して、クリックを処理することができました。

テンプレート:

<script type="text/x-handlebars" data-template-name="application">
    <h1>Content Here:</h1>
    {{outlet content}}
  </script>

  <script type="text/x-handlebars" data-template-name="content-view">
    <h2>content</h2>
    <button {{ action "createNewApp" }} class="btn btn-primary">Create application</button>
  </script>

JS:

var App = Ember.Application.create();

App.CreateAppView = Ember.View.extend({
    templateName: "content-view"    
});
App.CreateAppController = Ember.Controller.extend({
    createNewApp: function(){
        console.log("It's clicked, controller");
    }
});

App.Router.map(function(match) {
  match('/').to('createApp');
});
App.CreateAppRoute = Ember.Route.extend({
    renderTemplates: function() {
        this.render({ outlet: 'content'});
    },
    events: {
        createNewApp: function(){
            console.log("It's clicked, router");
        }
    }
});

ボタンがクリックされると、コンソール ログ メッセージは"It's clicked, controller"になり、コントローラの機能が削除されると、アクションはルータによって処理されます。コンソール ログ メッセージは になり"It's clicked, router"ます。Emberでターゲットが指定されていない場合{{action}}、ビューでイベントを見つけようとし、次にコントローラー、次にルートを見つけようとします。

これは、今日ソースからビルドされた emberjs のビルドを使用しています。

以下の元の回答:

新しいルーターの{{action}}は に置き換えられ{{linkTo}}ます。

emberjs.com のガイドは、新しいルーターに関する新しい情報で常に更新されています。リンクガイドではヘルパー{{linkTo}}について説明し、アクションガイドでは{{action}}ヘルパーを使用してテンプレート内のイベントを処理する方法について説明します。

于 2013-01-02T21:53:09.033 に答える