2

私は Backbone.js でしばらく作業してきましたが、最近遭遇したことの 1 つは次のとおりです。.eco.jst テンプレートにサーバー側のロジックを含める必要がある場合があります

例えば

  • i18n 翻訳 (現在、これについては i18n.js gem を参照してください)
  • ハードコーディングされていないパス (somemodel_path(somemodel))
  • 承認 (たとえば、ユーザーがこのモデルを破棄できる場合は削除ボタンを表示します)。Atm 入力されるjsonにいくつかの権利オブジェクトを渡すことでこれを解決します。
  • simple_form や S3_file_uploader などの html ヘルパーをレンダリングします (サーバー側でレンダリングすることでこれを解決し、ディスプレイを何も表示しません)

ご存じのとおり、.eco は node.js によって解析されるため、eco ファイルで ruby​​ を呼び出すことはできません。これらの問題のほとんどは、基本的に head 内に「データ」オブジェクトを作成することで解決します。これに似ています:

window.data = {
    some_translation = "<%= t('cool') %>",
    <%= "can_destoy_model = true," if can?('destroy', Model) %>
    post_edit_link = "<%= post_path(@post) %>
}

これがかさばることに加えて (これは単なる例です。通常、これはより整理されるか、いくつかの dom 要素に html5 データ属性を追加します)、時間がかかります。場合によっては、そうでなければ Rails のワンライナーになる完全なビジネス ロジックを再作成する必要があります。 (たとえば、エンコードされた Amazon ポリシーファイルとトークンを必要とする S3_file_uploader を取り上げます)

これについてどう思いますか。おそらく.ecoを使用しないでください(ただし、ビューを汚染するのではなく、別のファイルのテンプレートが好きです)。たとえば、口ひげやハンドルバーを使用した場合、サーバー側のロジックを使用できますか?また、そうであればどの宝石をお勧めしますか?

4

1 に答える 1

1

Backbone.js の経験は限られていますが、次の gem を使用して、ロジックのないテンプレートで環境をセットアップすることができました。

そして、私が現在取り組んでいるミニフレームワークでさえ、他のたくさんのものがあります(ここで見つけることができます)

Backbone を使用してシングル ページ アプリケーションを構築するために、このアプローチを選択しました。

基本的に、haml_assetsgem はスプロケットにファイルを解析する機能を提供し.hamlます。これは必要ありませんが、私は HAML 構文が大好きです。このhandlebars_assetsgem は、サーバー側とクライアント側の両方でハンドルバー テンプレートを解析する手段を提供します。テンプレート内でRubyコードを使用すると、あなたが言及したi18nとパスメソッドの問題の両方を解決できます。

これらのツールは、アプリケーションのテンプレートを DRY するのに優れており、テンプレート内にロジックを追加する手間を大幅に省くことができます。たとえば、Backbone Views を使用してdeleteボタンを表示するかどうかを決定する場合、Backbone View 内にロジックを保持し、そのロジックを使用して適切な Handlebars テンプレート (または部分) をレンダリングできます。

あなたの例を使用して:

コーヒースクリプト:

class ProjectShowView extends Backbone.View
  template: (context) -> HandlebarsTemplates['projects/show'](context)
  deleteButtonTemplate: (context) -> HandlebarsTemplates['projects/shared/delete_button'](context)

  render: (canDelete = false) ->
    @$el.html(@template(@model.toJSON()))
    @$('.delete_button_container').append(@deleteButtonTemplate()) if canDelete
    @

この例は非常に原始的で基本的なものですが、うまくいけば正しい方向に向けることができます。それが役立つことを願っています!

于 2013-03-06T23:48:17.687 に答える