2

我正在构建一个简单的数据可视化,根据记录总数显示设备类型的份额。我想知道是否有一种方法可以根据夹具中的所有元素计算属性。

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 上为 Devices 创建一个计算属性,用于计算总数,并取决于@each.measure;
  • (暗示 Device 将由指向其自己的 ObjectController 的子视图显示)添加needs: ['devices']到声明子控制器,以表明该控制器依赖于 Devices 控制器;
  • 在计算共享的设备控制器上创建一个计算属性,并依赖于measurecontrollers.devices.total

然后在 Device 控制器的 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 回答