2

レコードの総数に基づいてデバイス タイプのシェアを示す単純なデータ ビジュアライゼーションを構築しています。Fixture 内のすべての要素に基づいてプロパティを計算する方法があるかどうか疑問に思っています。

App.Devices = DS.Model.extend({
    label: DS.attr('string'),
    measure: DS.attr('number'),
    share: function() {
        //code to return measure / fixtureTotal
    }.property('measure')
});


App.Devices.FIXTURES = [
    { id: "0", label: "Computer", measure: 10 },
    { id: "1", label: "Mobile",   measure: 20 },
    { id: "2", label: "Tablet",   measure: 30 }
]                                 //  fixtureTotal = 60

したがって、この場合、「コンピューター」は全レコードの (10/60) のシェアを持つことになります。

これは計算されたプロパティで達成できますか、それとも別のソリューションが必要ですか? 理想的には、このソリューションは FixtureAdaptor または RESTAdaptor で動作します

ありがとう

4

1 に答える 1

1

todomvc.com で見たものと似ているようです: https://github.com/addyosmani/todomvc/blob/gh-pages/architecture-examples/emberjs/js/controllers/todos_controller.js#L32

すべてのデバイスを表示する ArrayController があると仮定すると、次のようになります。

  • 合計を計算し、依存するデバイスの ArrayController に計算されたプロパティを作成し@each.measureます。
  • (Device が独自の ObjectController を指すサブビューによって表示されることを意味します)needs: ['devices']子コントローラーの宣言に追加して、このコントローラーが Devices コントローラーに依存することを示します。
  • measure共有を計算し、とに依存するデバイス コントローラーで計算されたプロパティを作成しますcontrollers.devices.total

次に、デバイス コントローラの share() プロパティ関数で、 を使用して親コントローラのインスタンスへの参照を取得できます。また、 を使用してthis.get('controllers.devices')、total プロパティの値を直接取得することもできますthis.get('controllers.devices.total')


私はもともと「自分で試したことがない」という答えから始めましたが、これが機能するかどうかも確認したかったので、動作するコードを含む JSBin を次に示します: http://jsbin.com/ajoqak/12/edit ( REST アダプターで動作するように編集されています)。

これは、Ember.js 1.0.0-rc2 と、私が数日前に作成した ember-data のビルドを想定していることに注意してください (まだ公式リリースはありません)。API は、以前のバージョンを使用して見たいくつかの回答/例から少し変更されました。

于 2013-04-05T00:39:50.480 に答える