私はここでチュートリアルに従っています:http://blog.chariotsolutions.com/2012/01/from-list-to-details-view-using.html
レンダリング時にクリックハンドラーをリストビューアイテムに動的にバインドしようとしています。上記のリンクで説明されている方法は機能しません。私はいくつかの選択肢を試しました。
チュートリアルでは、レンダリング関数でこれを提案しています:(テンプレートは以下にあります)
activities.each(function(activity){
var renderedItem = template(activity.toJSON()),
$renderedItem = $(renderedItem); //convert the html into an jQuery object
$renderedItem.jqmData('activityId', activity.get('id')); //set the data on it for use in the click event
$renderedItem.bind('click', function(){
//This part is different in tutorial, but irrelevant
alert("Hello.");
alert($(this).jqmData('activityId')); //'this' represents the element being clicked
});
listView.append($renderedItem);
});
これは動作しません。ボタンは作成されますが、クリックしても何も起こりません。Chromeの開発ツールには、ドキュメントとドキュメントの2つのクリックイベントリスナーしか表示されません。
私はこれらを代替品として試しましたが、何も機能しません。警告メッセージ、ブレークポイントヒット、登録されたクリックイベントリスナーはありません。..。
$renderedItem.on('click', function(){
alert("Hello.");
alert($(this).jqmData('activityId')); //'this' represents the element being clicked
});
$renderedItem.live('click', function(){
alert("Hello.");
alert($(this).jqmData('activityId')); //'this' represents the element being clicked
});
私はまた、イベントを登録する標準的なバックボーンの方法を無駄に試しました...
events: {
'click .activity-list-item':'btnSelected'
},
...
btnSelected: function(){
alert("Hello");
//This is what I really want. Some data attached to the sender
alert($(this).jqmData('activityId'));
}
これはテンプレートです:
<li><a href="#activity-details" class="activity-list-item"identifier="<%= id %>"><%= date %> - <%= type %></a></li>
ご列席の皆様、ありがとうございました。
編集:私はテストを行いましたが、何らかの理由でバインドが削除されていると思います。私がすることができます:
myCollection.at(0).bind('click', function(){
alert("hello");
});
myCollection.at(0).trigger('click');
...そしてそれは正常に機能します。バインドが削除される可能性がある理由はありますか?
編集2:これはまだ解決されていません。残念ながら、私の一時的な解決策はまさにそれでした。すべてのリストビューアイテムを削除し、再入力して更新してもクリック可能ですが、アイテムをリストに追加すると、クリックできなくなります。.bind、.on、.live、.delegate。それらのどれも動作しません。これについてもっと多くの文書があったらいいのにと思います。これは一般的なプログラミングの問題であり、一般的な解決策はありません。