2013-04-01 115 views
2

我在構建一個簡單的數據可視化,它根據記錄總數顯示設備類型的份額。我想知道是否有一種方法來計算基於Fixture中所有元素的屬性。Ember.js:根據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

由於工作

回答

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']添加到聲明子控制器,以指示該控制器依賴於設備控制器;
  • 在計算共享的設備控制器上創建計算屬性,並取決於measurecontrollers.devices.total

然後在設備控制器上的份額()屬性的功能,你可以通過使用this.get('controllers.devices')得到父控制器的實例的引用,或者你甚至可以直接this.get('controllers.devices.total')得到總屬性的值。


我最初開始以「我還沒有嘗試過自己」的答案,但因爲我也想看看,如果這樣的工作,這裏是工作的代碼JSBin:http://jsbin.com/ajoqak/12/edit(編輯以使其工作使用REST適配器)。請注意,這裏假設了Ember.js 1.0.0-rc2以及我前幾天製作的一組內部數據(目前還沒有官方發佈)。 API已經改變了一些我曾經見過的使用以前版本的答案/例子。