在ember.js中定义和使用控制器方法

时间:2013-11-02 18:48:46

标签: javascript ember.js

首先,对于JS中的OOP来说,我总是很棒,这对我来说是新的,所以对待我就像一个菜鸟。

我正在构建我的第一个ember.js应用程序而且我被困住了(不是第一次,但我会自己解开,虽然这很难)。

我有两个型号: 形式 条目

条目当然是(一对多)与表单的关系,因此每个表单都可以包含多个属性。

表单属性:

id           : DS.attr( 'number' ),
title        : DS.attr( 'string' ),
views        : DS.attr( 'number' ),
conversion   : DS.attr( 'number' ),
entries      : DS.hasMany( 'entry' )

条目属性:

id       : DS.attr( 'number' ),
parent_id: DS.belongsTo( 'form' )

现在,我有一个表格路径,它在表格视图中显示所有表格,每个表格行都有一些信息,如表格ID,名称等等,并且效果很好。

我想要做的是显示每个表单的条目数。我想我应该通过控制器做到这一点,所以现在这是我的控制器:

// Form controller
App.FormController = Ember.ObjectController.extend({

    entriescount: function() {

        var entries = this.get( 'store').find( 'entry' );
        return entries.filterBy( 'parent_id', this.get( 'id' ) ).get( 'length' );

    }.property( 'entries.@each.parent_id')

});

现在出于某种原因,当我在{{entriescount}}循环中使用{{#each}}时,这不返回任何内容。它也不会返回单一形式的路线。请注意,在这两种情况下,{{title}}都可以使用。 我想知道,我是否正确使用控制器,以及如何让控制器输出数据。

由于

1 个答案:

答案 0 :(得分:0)

通过表单上的计算属性执行此操作。

类似于下面的entriesLength并将其用于显示:

App.YourForm = App.YourForm.extend
({
    entriesLength: function () {
        return this.get('entries').get('length');
    }.property('entries')
});

此外,您还可以设置与灯具中条目的关系:

App.Form.FIXTURES = [
    {
        id          : 1,
        form_id     : 1,
        title       : 'Order a Pizza',
        views       : 2,
        conversion  : 0,
        entries: [3,4]
    },