在解释我面临的问题之前,这是我正在使用的代码:
<!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 个警报将与添加的每个项目相对应。这不是我想要的方式。我希望仅针对已单击的主干视图触发事件,以便我可以访问我点击的主干视图的模型。
我怎样才能实现这个功能?如果我的问题不清楚,请告诉我。提前致谢。