的jsfiddle关联的模型,:http://jsfiddle.net/umgauper/jnf8B/743/Backbone.js的:this.model事件是第一个模型渲染,而不是与DOM元素
我试图创建一个基本的购物车应用程序。点击某件商品时,我希望将其标题和价格添加到购物车表中。
我正在为每个模型创建一个单独的视图实例。但是,当单击某个项目时,添加的表格数据始终是item1模型的模型数据,而不是我期望与单击的DOM元素关联的模型数据。为了获得点击元素的模型数据,我需要做些什么改变?
var app = app || {};
var Item = Backbone.Model.extend({
defaults: {
order: '',
title: '',
price: 0.01,
inCart: false
}
});
var item1 = new Item({order: 1, title: "shoes", price: 30.00});
var item2 = new Item({order: 2, title: "socks", price: 5.00});
var item3 = new Item({order: 3, title: "shirt", price: 20.00});
var ItemsCollection = Backbone.Collection.extend({model: Item});
var items = new ItemsCollection([item1, item2, item3]);
app.ItemView = Backbone.View.extend({
template: _.template($("#item-template").html()),
initialize: function() {
this.render()
},
render: function() {
$("#display").append(this.template(this.model.attributes));
},
el: "#container",
events: {
'click .title': 'moveToCart'
},
moveToCart: function(e) {
e.stopImmediatePropagation();
var title = this.model.get("title");
var price = this.model.get("price");
$("table").append("<tr><td>" + title + "</td><td>" + price + "</td></tr>");
}
});
var itemView1 = new app.ItemView({model: item1});
var itemView2 = new app.ItemView({model: item2});
var itemView3 = new app.ItemView({model: item3});
<div id="container">
<div id="display">
</div>
<table id="cart">
<thead>
<th>Title</th>
<th>Price</th>
</thead>
</table>
</div>
<script type="text/template" id="item-template">
<div>
<p class="title"><%= title %></p>
<p class="price">$<%= price %></p>
</div>
</script>
啊哈!现在你已经指出了,似乎每个视图都应该有自己的el。谢谢你的帮助!并提醒在渲染中添加'return this'语句。 – unamaga 2014-11-03 19:41:53