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