2

私は ember.js が初めてで、クリック イベントを作成した div をどのように特定するのか疑問に思っていました。

index.html

------------ 古いコード -----------------------

 {{#each App.menuController}} 
     {{#view App.menuClickable}}
        <div id={{bindAttr id="idTagName"}}>
           {{title}}
        </div>
     {{/view}}
 {{/each}}

---------- 更新されたコード ----------------------

 {{#each App.menuController}} 
        <div id={{bindAttr id="idTagName"}} {{action selectMenuItem target="App.menuClickable"}}>
           {{title}}
        </div>
 {{/each}}

app.js

App.MenuOption = Ember.Object.extend({
    title: null,
    idName: null
});

App.menuController = Ember.ArrayController.create({
   content:[],
   init : function() 
   {
        // create an instance of the Song model
        for(var i=0; i<menuOptions.length; i++) {
            console.debug(menuOptions[i]);
            this.pushObject(menuOptions[i]);
        }

   },
   click: function(e)
   {
     alert("here");  
   }
});


App.menuClickable = Ember.View.extend({
  click: function(evt) {
    alert("ClickableView was clicked!");
    console.debug(evt);
  },
  classNames: ['navButton'],
  selectMenuItem: function()
  {
    alert("selected Menu clicked");
  }
});

ご覧のとおり、これにより、タグ名が異なるいくつかの div が出力されます。onclick アクション イベントを各 div に関連付けたい。

調べてみると、次の2つの方法があるようです。

  1. 私が持っているようなビューを作成し、クリック関数をオーバーライドします(e){}。ただし、このルートを取得した場合、異なる div とそれをトリガーしたものを区別する方法がわかりません。イベントのプロパティ (target->attribute->Id) を見ることができましたが、よりクリーンな方法があるはずだと感じています
  2. アクション {{action click "idTagName"}} を使用します。ただし、App.menuClickable 内でこのアクションを実装する際に問題が発生しています。トリガーされていません。その理由はわかりません。次のエラーが表示されます。

    エラー: イベント 'クリック' を処理したものはありません。throw new Error("イベントを処理したものはありません '" + name + "'.");

App.menuClickable にあるようなクリック アクションを実装すると思いました。これを実装する必要がある別の場所はありますか?

4

1 に答える 1

2

アプローチはここ{{action selectMenuItem "idTagName"}}に行く方法です。デフォルトでは、ヘルパーはコントローラーのハッシュで関数{{action}}を探します。見つからない場合は、ルーターに送信され、現在のルートと親ルートがルートのハッシュの機能についてチェックされます。selectMenuItemactionsselectMenuItemactions

ビューで関数をトリガーする場合は、次のようにターゲットとして指定します{{action selectMenuItem "idTagName" target="view"}}

于 2013-08-30T07:38:13.027 に答える