0

私はこのようなビューモデルを持っています。

function ViewModel()
{
    this.Regions = ['Europe', 'AsiaPac', 'Americas'];

this.Sales = { 
    EuropeRevenue: 100, 
    EuropeProfit: 100, 
    AsiaPacRevenue: 200, 
    AsiaPacProfit: 100,
    AmericasRevenue: 300,
    AmericasProfit: 250
};
}

各地域を印刷してから、収益と利益を印刷する必要があります。

それ、どうやったら出来るの?リージョンをループし、リージョンごとにSales。[Region]RevenueとSales。[Region]Profitを実行します。

    <div data-bind="foreach: Regions }">
        Region:<span data-bind="text: $data"></span>
        Revenue:<span data-bind="text: $root.Sales.$dataRevenue???"></span>
        Profit:<span data-bind="text: $root.Sales.$dataProfit???"></span>
    </div>

ありがとう。

4

1 に答える 1

2

データ設定は非常に奇妙なので、変更できる場合は、RegionSalesコレクションを使用してこれをモデル化することをお勧めします...

this.RegionSalesData = 
        [ 
            { Name: 'Europe', Revenue: 100, Profit: 100},
            { Name: 'AsiaPac',Revenue: 200, Profit: 100},
            { Name: 'Americas', Revenue: 300, Profit: 250}];

次に、、、プロパティのバインディングNameで使用できます。RevenueProfit

しかし、実際の質問に答えるには、JavaScriptでは、[]構文を使用して名前でプロパティにアクセスできるため、単純な文字列concatを使用してバインディングでプロパティ名を生成できます。

<div data-bind="foreach: Regions ">
    <div>
        Region:<span data-bind="text: $data"></span>
        Revenue:<span data-bind="text: $root.Sales[$data+'Revenue']"></span>
        Profit:<span data-bind="text: $root.Sales[$data+'Profit']"></span>
    </div>
</div>

デモJSFiddle

于 2013-02-20T19:29:51.813 に答える