5

モデルに計算されたプロパティがあり、それを計算するには、コントローラーからのプロパティが必要です (モデルを制御しているものではありません)。あることは知っていますがneeds:、これは単なる
コントローラーレベルです。
モデルを管理しているコントローラー以外のコントローラーから Ember のプロパティを取得するにはどうすればよいですか?

[この質問をした人][1] のような書式設定をしようとしていますが、そこで提案されていることに成功しませんでした。
そのため、計算されたプロパティを使用してモデルのフォーマットを実行しようとしましたが、そのプロパティを計算するには、コントローラーから別のプロパティが必要です。

どんな助けでも大歓迎です!ありがとう!

注: モデルの管理には EmberData を使用しています。

編集:
私がやろうとしていることを明確にするために、問題
一般的な方法で示す例を設定しました:サンプルアプリケーションでは、数値を入力し、保存し
、リストに表示できます。モデルデータ自体は変更せず、テンプレート上の表示を変更する「変換係数」を入力することもできます。たとえば、数値 2 を入力すると、2 はモデルに保存されますが、リストに表示されると、以前に入力した変換係数で「フォーマット」され、計算された値がテンプレートに表示されます。問題は、フォーマットしたい値が別のコントローラーに保存されていることです。これまでに試したことは次のとおりです。

  • #1 アプローチ: ArrayController
    の計算されたプロパティ -needs:コントローラーで使用してトラバースし、値を取得する --
    > jsfiddleこの例ではローカル ストレージを使用しているため、いくつかのレコードを作成し、ArrayController の計算されたプロパティのコメントを解除すると、最初は期待どおりに機能し、入力したレコードが表示されることがわかります)。

  • #2アプローチ:
    モデル自体の計算されたプロパティ
    -> jsfiddle
    私が遭遇した問題:
    モデル内にいるときにコントローラーからプロパティを取得する方法がわかりません

  • #3 アプローチ:
    ハンドルバー ヘルパーとneeds:コントローラー
    1) コントローラー (モデルを処理する) で計算されたプロパティを定義して、他のコントローラーから問題の値を取得します
    2) ハンドルバー ヘルパーを作成し、モデルから値を渡し、コントローラーから値を取得し、計算された値を返します
    -->jsfiddle (まだ十分な評価ポイントがないため、コメントで 3 番目の jsfiddle へのリンクを見つけることができます)。
    私が遭遇した問題:
    フォーマットされた数値を表示する代わりに、レンダリングされたテンプレートのすべての値で "NaN" を取得します。

誰かがこれを解決する方法を知っているか、正しい方向に私を向けることができれば素晴らしいでしょう. あなたの助けは本当に感謝しています! 御時間ありがとうございます!

4

2 に答える 2

10

モデルからコントローラにアクセスすることは、Ember のアーキテクチャの粒度に実際に反します。ほとんどのフォーマットの問題は、Handlebars ヘルパーを使用して解決するのが最適ですが、コントローラーとモデルからのデータを真剣に組み合わせる必要がある場合は、おそらくコントローラーで計算されたプロパティが必要になります。

あなたがやろうとしていることの具体例を挙げていただけますか?これにより、適切なソリューションを提案しやすくなります。

于 2013-06-06T22:31:18.590 に答える
1

私はそれを機能させました:私は#3アプローチを使用しました(私の質問で概説)。

  • 計算されたプロパティを使用して、他のコントローラーから、フォーマットされた値を表示するテンプレートにバインドされているコントローラーに値をプロキシしています
  • convertedフォーマットを行うハンドルバー ヘルパーを作成しました。handlebars ヘルパーは 2 つのパラメーターを受け入れます。コントローラーからプロキシーした値 (これは別のコントローラーから取得されます) とモデルからの値です。

以前は機能しなかったのは、テンプレートでヘルパーを使用すると、書式設定された出力ではなく、すべての項目で "NaN" が返されることでした。
問題を解決したのは、テンプレート内のモデルを次のように処理する代わりに、次のようにすることでした。

    {{#each controller}}
    <tr>
        <td>{{converted amount conversionFactor}}</td>
    </tr>
    {{else}}
    <tr>
        <td>No amounts here yet</td>
    </tr>
    {{/each}}

私はこれを次のように変更しました:

    {{#each item in controller}}
    <tr>
        <td>{{converted item.amount conversionFactor}}</td>
    </tr>
    {{else}}
    <tr>
        <td>No amounts here yet</td>
    </tr>
    {{/each}}

そしてそれは完全に機能します!

これが動作中のjsfiddleです

于 2013-06-09T17:55:24.860 に答える