2013-01-09 78 views
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对象之一,我得到:主干:将模型属性传递给视图返回undefined

{ 
    id: "6", 
    dimensions: "12'", 
    price: "649.99", 
    sort_order: "1" 
} 

我把这个对象传递到一个新的观点,但如果我CONSOLE.LOG this.size从ShapeSizePoolButtonView我得到:

undefined 

有没有人有我的错在哪里的想法?

谢谢!

回答

2

Backbone docs

当创建一个新的视图,你通过选项 - 连接到 视图作为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 
    }, 
    .... 
}); 
+0

感谢卢卡斯的解释。我想我应该确保我总是阅读手册:)。 – jlonganecker

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不正确。

+0

你是对的,我需要放弃一个s。谢谢! – jlonganecker