var ShapeSizePoolView = Backbone.View.extend({
el : $('#agpb_shape_size_body'),
tmpl : $('#tmpl_agpb_shape_size').html(),
initialize : function() {
this.render();
},
render : function() {
var compiled_template = _.template( this.tmpl, this.model.toJSON() ),
sizes = this.model.get('sizes');
$(this.el).append( compiled_template );
// this is used for our pool sizes
for(var i = 0; i < sizes.length; i++) {
console.log(sizes[i]);
new ShapeSizePoolButtonView(
{
size : sizes[i],
el : $(this.el).find('.agpb_size_list')
});
}
}
});
var ShapeSizePoolButtonView = Backbone.View.extend({
tmpl : $('.tmpl_agpb_shape_size_button').html(),
initialize : function() {
// this.render();
console.log( this.size );
},
render : function() {
var compiled_template = _.template( this.tmpl, this.sizes );
$(this.el).append( compiled_template );
}
});
this.model.get('sizes')返回一个对象数组。如果我在console.log中找到了ShapeSizePoolView中的一个对象:
{
id: "6",
dimensions: "12'",
price: "649.99",
sort_order: "1"
}
我将此对象传递给一个新视图,但是如果我从ShapeSizePoolButtonView中调用console.log this.size,我得到:
undefined
有没有人知道我哪里出错了?
谢谢!
答案 0 :(得分:2)
创建新视图时,您传递的选项 - 合并后 进入视图中已存在的任何默认选项 - 附加到 作为this.options的视图供将来参考。有几个 特殊选项,如果通过,将直接附加到 view:model,collection,el,id,className,tagName和attributes。
因此,您可以使用this.options
:
var ShapeSizePoolButtonView = Backbone.View.extend({
tmpl : $('.tmpl_agpb_shape_size_button').html(),
initialize : function() {
// this.render();
console.log( this.options.size ); // Not this.size
},
....
});
答案 1 :(得分:1)
您正在将size
传递给View
构造函数,但它不会自动复制到this
。您需要添加如下代码:
var ShapeSizePoolButtonView = Backbone.View.extend({
initialize : function(options) {
this.size = options.size;
// this.render();
console.log( this.size );
},
此外,您在渲染调用中错误地使用了this.sizes
而不是this.size
。