1
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

有谁知道我哪里出错了?

谢谢!

4

2 回答 2

2

骨干文档

创建新视图时,您传递的选项(在合并到视图上已存在的任何默认选项后)将作为 this.options 附加到视图以供将来参考。有几个特殊选项,如果通过,将直接附加到视图:模型、集合、el、id、className、tagName 和属性。

因此,您可以使用以下方法访问此自定义选项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
    },
    ....
});
于 2013-01-09T21:16:37.927 回答
1

您正在传递sizeView构造函数,但它不会被this自动复制到。您需要添加如下代码:

var ShapeSizePoolButtonView = Backbone.View.extend({
  initialize : function(options) {
    this.size = options.size;
    // this.render();
    console.log( this.size );
  },

此外,您错误地使用this.sizes而不是this.size在您的渲染调用中。

于 2013-01-09T21:12:58.797 回答