我正在构建一个简单的数据可视化,它根据记录总数显示设备类型的份额。我想知道是否有办法根据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
由于
答案 0 :(得分:1)
似乎与我在todomvc.com上看到的相似:https://github.com/addyosmani/todomvc/blob/gh-pages/architecture-examples/emberjs/js/controllers/todos_controller.js#L32
假设您有一个显示所有设备的ArrayController,我会尝试这样做:
@each.measure
; needs: ['devices']
添加到声明子控制器,以指示此控制器依赖于Devices控制器; measure
和controllers.devices.total
。然后在Device控制器上的share()属性函数中,您可以使用this.get('controllers.devices')
获取对父控制器实例的引用,或者您甚至可以直接使用{{获取total属性的值。 1}}。
我最初以“我自己没有尝试过”开始回答,但是因为我也想知道这是否有用,这里有一个带有工作代码的JSBin:http://jsbin.com/ajoqak/12/edit(编辑使其工作使用REST适配器。)
请注意,这假设Ember.js 1.0.0-rc2和我几天前制作的ember-data版本(目前还没有正式版本); API已经从我使用以前版本看到的一些答案/示例中略有改变。