2013-11-01 95 views
0

我並沒有面臨技術挑戰,因爲我有一些工作代碼。我只是不確定這是正確的路要走,所以我想繼續沿着這條道路前,由一些專家運行...UnderscoreJS嵌套模板:我該怎麼做?

我使用的'渲染'功能從這個職位:https://stackoverflow.com/a/10136935/1480182

然後我有兩個骨幹觀點:

DetailLineView = Backbone.View.extend({ 
    initialize: function (options) { 
     this.options = options; 
     this.render(); 
    }, 
    render: function() { 
     var variables = { detailLine: this.options.detailLine }; 
     this.$el.html(render("DetailLine", variables)); 
    } 
}); 

CustomerView = Backbone.View.extend({ 
    initialize: function (options) { 
     this.options = options; 
     this.render(); 
    }, 
    render: function() { 
     var dl = ""; 
     _.each(this.options.customer.attributes.detailLines, function (line) { 
      var v = { detailLine: line }; 
      dl += render("DetailLine", v); 
     }); 

     var variables = { customer: this.options.customer.attributes, detailLinesHtml: dl }; 
     this.$el.html(render("Customer", variables)); 
    } 
}); 

相應的模板當然和。

現在上面的代碼工作,但據我可以告訴我實際上沒有使用DetailLineView。

我有一種感覺,有一個(很多?)更優雅的方式做到這一點,但我沒有看到如何...任何人都可以幫忙嗎?

編輯:更好的解決方案(?):

我改變了我的CustomerView這樣:

CustomerView = Backbone.View.extend({ 
    initialize: function (options) { 
     this.options = options; 
    }, 
    render: function() { 
     var variables = { customer: this.options.customer.attributes }; 

     this.$el.html(renderTemplate("Customer", variables)); 
     var dlv = new DetailLineView({ 
          el: $('.detailLinesContainer', this.$el), 
          detailLine: this.options.customer.attributes.detailLines[0] 
         }); 
     dlv.render(); 
    } 
}); 

我好喜歡它,現在我用我的DetailLineView ...

回答

0

我已經用一個解決方案更新了我的OP,這個解決方案比原來的更好。