2

私は、Ember を使用して、予算マネージャーの形で小さなテスト アプリを作成しています。毎月の制限や説明などの一般的なプロパティを含む Budget オブジェクトがあります。また、名前や支出額などを含む Expense オブジェクトのセットもあります。どちらも、Ember Data の REST アダプターを使用してサーバーから取得されます。

HTML:

<body>
    <script type="text/x-handlebars" data-template-name="budget">
    <h2>{{name}} (€ {{amount}})</h2>
    </script>

    <script type="text/x-handlebars" data-template-name="expenses">
    <ul id="expense-list">
        {{#each model}}
            {{render "expense" this}}
        {{/each}}
</ul>
</script>

    <!-- expense template -->
    <script type="text/x-handlebars" id="expense">
        <li>
            <label>{{description}}</label>
            <label class="subtle">{{formatDate time}}</label>
            <label class="amount">{{amount}}</label>
        </li>
    </script>
</body>
</html>

JavaScript :

window.App = Ember.Application.create();

App.ApplicationAdapter = DS.RESTAdapter.extend({
    host: 'http://localhost:5000',
    namespace: 'outthepocket/api'
});

// Model
App.Expense = DS.Model.extend({
    amount: DS.attr('number'),
    description: DS.attr('string'),
    time: DS.attr('date')
});

App.Budget = DS.Model.extend({
    name: DS.attr('string'),
    amount: DS.attr('number')
});

// Routes
App.Router.map( function() {
    this.resource('budget');
    this.resource('expenses');
});

App.ExpensesRoute = Ember.Route.extend({
    model: function()
    {
        return this.store.find('expense');
    }
});

App.BudgetRoute = Ember.Route.extend({
    model: function()
    {
        return this.store.find('budget', 1);
    }
});

すべての Ember チュートリアルで見られるアーキテクチャに従って、経費のリストをモデルとする ExpensesRoute と、選択した予算をモデルとする BudgetRoute があります。これは、適切な URL にアクセスして各リソースを表示する限り、うまく機能します。

  • myapp.html#budgetは、サーバーからのデータを使用して予算テンプレートをレンダリングします。
  • myapp.html#expensesは、サーバーからのデータを使用して経費テンプレートをレンダリングします。

私が今抱えている問題は、両方のテンプレートとそのデータを 1 つのページ(インデックス ページ) に表示したいということです。私はこれに対して2つの解決策を試しました:

  • 解決策 1 : 別のルートとテンプレートを用意し、メイン アプリケーション テンプレートで {{render Budget}} と {{renderexpensed}} を呼び出します。これにより、両方のテンプレートがレンダリングされますが、データはありません。

  • 解決策 2 : IndexRoute だけを用意し、そのモデル プロパティから予算と経費の両方を返し、それらをインデックス テンプレートにレンダリングします。これは多かれ少なかれ機能しますが、Ember のさまざまなリソース、ルート、およびコントローラーの適切な分離に反するようです。

何かご意見は?私は 5 つか 6 つのチュートリアルと Ember の公式ガイドを見てきましたが、それらのどれも、異なるページ/ルートにリンクすることなく、複数のリソースに支えられた複数のテンプレートを使用して 1 ページの Web アプリを組み立てる方法を明確にしていませんでした。

4

1 に答える 1