2011-09-13 23 views
5

テンプレートにテンプレートを含めることはできますか? ERBが部分的に処理する方法と似たようなものでしょうか?Ecoテンプレートを使用したBackbone.js:テンプレートにテンプレートを含めるにはどうすればいいですか?

ERBのようにネストされたモデルをレンダリングしようとするのではなく、Backbone.jsがこれを処理するようにしてください。

template: JST["backbone/templates/projects/project"] 

$(@el).html(@template(@model.toJSON()))  
for s in @model.sessions.models 
    v = new Worktimer.Views.ProjectSessions.ShowView(model: s) 
    $(@el).find('.sessions').append(v.render().el) 

Projects.ProjectView

Projects.IndexView

template: JST["backbone/templates/projects/index"] 

addAll:() -> 
    @options.projects.each(@addOne) 

addOne: (project) -> 
    view = new Worktimer.Views.Projects.ProjectView({model : project}) 
    @$("#projects-table").append(view.render().el) 

render: -> 
    $(@el).html(@template(projects: @options.projects.toJSON())) 
    @addAll() 

モデルプロジェクトのネストされたコレクションと呼ばれたセッション:

注、私はCoffeeScriptの構文を使用していますProjectSessions.ShowView

そう
template: JST["backbone/templates/project_sessions/show"] 

render: -> 
    $(this.el).html(@template(@model.toJSON())) 

、最後に私たちは、このようなテンプレートを入れ子にしている:

  • 事例インデックス
    • プロジェクト
      • セッション
      • セッション
      • セッション
      • セッション
    • プロジェクト
      • セッション
    • プロジェクト
      • セッション
      • セッション

答えて

-1

テンプレートの接頭辞を.erbとすると、ERBプロセッサを使用できます。

yourfile.js.coffeeからyourfile.js.coffee.erbに変更すると、<%= %>タグをCoffeeScriptテンプレートに追加することができます。

+0

あなたがfile.jst.eco.erbを行うことをお勧めので、これは、エコ内でしょうか? – miketucker

+0

追加する拡張子が増えるほど、使用されるプロセッサーが増えます。 –

+0

また、ECOとERBはどちらも '<%= %>'を使用しているため、ECBがそれに到達する前にERBがすべての補間を邪魔してしまいます。 :) – micapam

0

私はEcoがこれをサポートしているとは思わない。これは本格的なERBの置き換えよりも、Mustacheのような単純なテンプレートシステムとしてのものです。 Railsでは、おそらくEcoテンプレートをレンダリングし、出力をERBまたはHamlテンプレートに注入します。

Node.jsの開発では、CoffeeKupを見てみましょう。これにより、CoffeeScriptでテンプレートを作成し、パーシャルをサポートできます。ここ

+0

ありがとう、私はバックボーンとRails 3.1でEcoを使用しています。両親の中に個々のテンプレートを注入するためにバックボーンを使用することで終わりました。 – miketucker

5

私は背骨に使う少しのヘルパー:

# Render Partials in ECO-Templates like in Rails-ERB 
# 
# usefull to clean up structure in spine.js and other js-mvc´s like backbone 
# 
# usage: 
# <%- render_partial 'path/to/partial' %> .. will render ../spine-app/views/path/to/_partial.jst.eco 
# <%- render_partial 'path/to/partial', foo: 'bar' %> .. will render ../spine-app/views/path/to/_partial.jst.eco .. locals = @foo 
# 
window.render_partial = (path, options = {}) -> 
    # add the leading underscore (like rails-partials) 
    path = path.split('/') 
    path[ path.length - 1 ] = '_' + path[ path.length - 1 ] 
    path = path.join('/') 
    # render and return the partial if existing 
    try 
     JST["app/views/#{ path }"](options) 
    catch error 
     # if App.Environment != 'production' then "<p class='error'>Sorry, there is no partial named '#{ path }'.</p>" else '' 
     "<p class='error'>Sorry, there is no partial named '#{ path }'.</p>" 
関連する問題