2012-12-14 15 views
6

私はRailsアプリケーションでAngularJSを使い始めました.Rails内でhamlテンプレートを使用していたので、クライアントサイドでAngularJSと同じことをしたいと思います。問題は、hamlファイルをどこで読むのか分かりません。angularjs with client side haml

私は投資家のためのモデルを持っています。私は 'show'テンプレートをhamlに変換しようとしています。ここで

はここ

investors.js.coffee

# Setup the module & route 
    angular.module("investor", ['investorService']) 
    .config(['$routeProvider', ($provider) -> 
     $provider 
     .when('/investors/:investor_id', {templateUrl: '/investors/show.html', controller: 'InvestorCtrl'}) 
    ]) 
    .config(["$httpProvider", (provider) -> 
     provider.defaults.headers.common['X-CSRF-Token'] = $('meta[name=csrf-token]').attr('content') 
    ]) 

    angular.module('investorService', ['ngResource']) 
    .factory('Investor', ($resource) -> 
     return $resource('/investors/:investor_id.json', {}, { 
     show: {method: 'GET'}, 
     }) 
    ) 

    angular.bootstrap document, ['investor'] 

を示すために、関連する私のAngularJSコードは私のコントローラAngularJSコード

investors_controller.js.coffee

# Show Investor 
window.InvestorCtrl = ($scope, $routeParams, Investor) -> 
    html = haml.compileHaml({sourceId: 'simple'}) 
    $('#haml').html(html()) 

    investor_id = $routeParams.investor_id 
    $scope.investor = Investor.show({investor_id: investor_id}) 

ですバックエンドにはRails JSON APIがあります。ここで

はAngularJSが見て開始する前に、私は.hamlを持っているとtemplateURLにこれを渡して、それをコンパイルするプラグインhaml_coffee_assetsを取得したいと思い結局

<script type="text/haml-template" id="simple"> 
    %h1 {{investor.name}} 
</script> 

<div id="haml"></div> 

<h1>{{investor.name}}</h1> 

<p> 
    <b>Total Cost</b> 
    {{investor.total_cost}} 
</p> 

<p> 
    <b>Total Value</b> 
    {{investor.total_value}} 
</p> 

<a href='/investors/angular#/investors/{{investor.id}}/edit'>Edit</a> 
<a href='/investors'>Back</a> 

で、読み込むshow.htmlファイルであります動的なフィールドとコンテンツの変更。

参考:https://github.com/netzpirat/haml_coffee_assets

現在、これはHAMLを変換し、HAMLのidを持つdiv要素に入れます。しかし、AngularJSは、操作が遅すぎるため、hamlコード内の{{investor.name}}を投資家の名前に変更しません。

このようにAngularJSプロジェクト内にクライアントサイドのhamlテンプレートを正しく実装するにはどうすればよいですか?

+1

なぜサーバーサイドのハムレンダリングではないですか?あなたのハムを書いて、いつものように提供して、クライアント側のアプリに変換されたHTMLをリクエストさせてください。このようにして、ハムのフィルターを利用し、角と戦わないようにします。それ以外の場合は、クライアント上でhamlテンプレートを解析した後、手動で角度アプリをブートストラップします。私はそれを試していないが、それは動作することができます。 – jaime

+1

haml形式のRailsビューを使用する場合は、templateUrlに何を入れますか? – map7

答えて

8

すべてのHamlテンプレートをassets/templatesフォルダに入れることができます。あなたは含めることができるようにしたい場合は

.htmlの資産/(テンプレート名)/から利用できるようになります次に、あなたのすべてのテンプレートを

Rails.application.assets.register_engine '.haml', Tilt::HamlTemplate 

:次に、あなたはこれを使用してHAMLを提供するために、あなたの資産パイプラインをフックアップカスタムモジュールを定義し、代わりにそれを使用することができ、あなたのHAMLテンプレート内でヘルパーをレール:

module CustomHamlEngine 
    class HamlTemplate < Tilt::HamlTemplate 
    def evaluate(scope, locals, &block) 
     scope.class_eval do 
     include Rails.application.routes.url_helpers 
     include Rails.application.routes.mounted_helpers 
     include ActionView::Helpers 
     end 

    super 
    end 
    end 
end 

Rails.application.assets.register_engine '.haml', CustomHamlEngine::HamlTemplate 

これはあなたのテンプレートのスコープにすべてのレールのヘルパーを追加します。その後、あなたはテンプレートのURLを角度で渡すことができ、それは自動的にすべての足の仕事をします!

+0

私は同じことを達成しようとしています(申し訳ありませんが、私はこれが古い投稿であることを知っています)。私はangle-rails-templateとnghaml拡張を使用しています。ハムルはうまく動いていますが、ヘルパーはうまくいきません。 CustomHamlEngineをhaml.rb初期化子に追加しましたが、ダイスはまだありません。私は詳細をここに掲載しました:http://stackoverflow.com/questions/22976912/rails-app-to-angular-haml-rails-helpers?lq=1 – Morgan