我正尝试在服务器端使用Ruby on Rails构建backbone.js应用程序。如何显示从产品列表中单击时的产品详细信息
我能够得到产品的清单,看起来不错。
下一个任务是在用户点击产品时显示产品详细信息。根据我的代码,当我点击某个产品时,我会收到一条警告消息“/products/20.json”。
问题:我是否需要使用jQuery手动进行ajax调用,或者backbone.js是否应该帮助我获得该产品的价值,因为Backbone.js符合REST标准?
$(function(){
window.Product = Backbone.Model.extend({
defaults: { name: 'name missing' },
urlRoot: '/product'
});
window.ProductList = Backbone.Collection.extend({
model: Product,
url: '/products.json'
});
window.ProductViewForListing = Backbone.View.extend({
initialize: function() {
this.template = $('#productTmplForListing').template(),
_.bindAll(this, 'render');
},
className: 'product',
render: function(){
var fragment = $.tmpl(this.template, this.model.toJSON());
$(this.el).html(fragment);
return this;
}
});
window.ProductViewForShow = Backbone.View.extend({
el: $('#main'),
initialize: function(){
_.bindAll(this, 'render');
this.render();
},
render: function(){
self.el.append($('Hello world'));
}
});
window.AppView = Backbone.View.extend({
el: $('#products'),
events: {
"click .product": "showProduct"
},
initialize: function(){
_.bindAll(this, 'render');
this.render();
},
render: function(){
var self = this;
this.collection.each(function(product){
var view = new ProductViewForListing({model: product});
self.el.append(view.render().el);
});
},
showProduct: function(e){
console.log(e);
var href = $(e.target).closest('.product').find('a').attr('href');
alert(href);
}
});
var products = new ProductList();
products.fetch({
success: function() {
new AppView({ collection: products });
}
});
});
<script type="text/x-jquery-tmpl" id="productTmplForListing">
<a href="/products/${id}.json">
<img alt="${name}" class="productImage" height="190" src="/system/pictures/${id}/thumbnail/${picture_file_name}" width="190" />
</a>
<p class="productName">
<a href="/products/${id}.json">
${name}
</a>
</p>
<p class="productPrice">
${price}
</p>
</script>
你可以,建议你在SO上粘贴你的代码。 –
我在问题本身中粘贴了代码。不过,我不喜欢这样的事实,因为SO不使用浏览器的全部宽度,并立即放置水平滚动条。 –
可以理解,但是在这里有代码的理由是有一个可以独立存在的合并问题和答案。 –