Ember.js:根据Fixture中的所有元素设置计算属性

时间:2013-04-01 23:56:16

标签: ember.js ember-data

我正在构建一个简单的数据可视化,它根据记录总数显示设备类型的份额。我想知道是否有办法根据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 个答案:

答案 0 :(得分: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控制器;
  • 在设备控制器上创建计算共享的计算属性,并取决于measurecontrollers.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已经从我使用以前版本看到的一些答案/示例中略有改变。