私が直面している問題を説明する前に、これは私が使用しているコードです:
<!DOCTYPE HTML>
<html>
<head>
<script type="text/javascript" src="http://code.jquery.com/jquery-1.7.1.min.js"></script>
<script type="text/javascript" src="http://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.3.1/underscore-min.js"></script>
<script type="text/javascript" src="http://cdnjs.cloudflare.com/ajax/libs/backbone.js/0.9.2/backbone-min.js"></script>
<script type="text/template" id="view_template">
<li>
<label class="lbl" style="width:100px;display:inline-block;"><%= name %></label>
<button class="btn">Click</button>
</li>
</script>
<script type="text/javascript">
AppModel = Backbone.Model.extend({
defaults : {
m_name : "Default name"
},
modify : function(value) {
this.set({
m_name : value
});
}
});
$(document).ready(function() {
$("#add").click(function() {
var appModel = new AppModel();
appModel.modify($("#txt").val());
new CustomView({
model : appModel
});
$("#txt").val("");
});
CustomView = Backbone.View.extend({
el : $(".list"),
events : {
"click .btn" : "showAlert"
},
initialize : function() {
this.render();
},
render : function() {
var variables = {
name : this.model.get("m_name")
};
var t = _.template($("#view_template").html(), variables);
$(this.el).append(t);
},
showAlert : function() {
alert(this.model.get("m_name"));
}
});
});
</script>
</head>
<body>
<input type="text" id="txt"/>
<button id="add">
Add
</button>
<ul class="list" style="list-style: none"></ul>
</body>
</html>
デモはこちら - http://jsfiddle.net/jCekv/
テキストフィールドに任意の値を入力し、[追加] をクリックします。テキストは、バックボーン ビューであるリストに追加されます。リストに複数の値を追加し続けることができます。いくつかのアイテムを追加した後、いずれかの [クリック] ボタンをクリックします。リスト内のアイテム。そのビューのモデルで値を取得したいのですが、追加する方法が原因でEvents
、イベントハンドラーが複数回実行されます。たとえば、3つのアイテムを追加していずれかのボタンをクリックした場合リストには、追加された各項目に対応する 3 つのアラートが表示されます。これは私が望む方法ではありません。アクセスできるように、クリックされたバックボーン ビューに対してのみイベントをトリガーしたいと考えています。クリックしたバックボーン ビューのモデル。
この機能を実現するにはどうすればよいですか?.質問が明確でない場合はお知らせください.よろしくお願いします.