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')は、オブジェクトの配列を返します。ShapeSizePoolViewのオブジェクトの1つをconsole.logにすると、次のようになります。

{
    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

コンストラクターに渡し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

于 2013-01-09T21:12:58.797 に答える