Ember中的嵌套数据应该是单个arrayController还是多个?

时间:2012-06-03 03:44:10

标签: ember.js

我正在开发一个概念验证应用程序,我对数据存储有疑问。

我的应用有一个客户端型号

PM.Client = Ember.Object.extend({
    id: null,
    client: null,
    projects: {}
});

和项目模型

PM.Project = Ember.Object.extend({
    id: null,
    title: null,
    totalHours: null,
    cost: function(){
        return this.get('totalHours') * PM.get('rate');
    }.property('totalHours')
});

每个客户可以有多个项目,但每个项目只能有一个客户。目前我有一个带有以下数据的虚拟JSON文件

[
    {
        "id": "1",
        "client": "Fastbook",
        "projects": [
            {
                "id": "1",
                "title": "Website redesign",
                "totalHours": "45",
                "cost": "4500"
            },
            {
                "id": "2",
                "title": "Tidy up admin section",
                "totalHours": "10",
                "cost": "1000"
            }
        ]
    },
    {
        "id": "2",
        "client": "Epicenter",
        "projects": [
            {
                "id": "1",
                "title": "Chaching",
                "totalHours": "25",
                "cost": "2500"
            }
        ]
    }
]

在Ember中存储这些数据的最佳方法是什么?我应该为客户端使用arrayController而为项目使用另一个吗?

Ember Data可能还可以,但我不打算为此设置REST。 Ember Data可以使用localStorage吗?

4 个答案:

答案 0 :(得分:1)

如果没有关于应用程序将要做什么的更多细节,有点难以说明。

我会为客户使用ArrayController。我认为没有必要为项目提供一个项目,因为该数据嵌套在客户端对象中。如果您有一个选择项目的显示器,您可能希望为当前选定的项目安装一个控制器。

如果您可以进一步描述您打算如何处理项目数据,我可以提供更好的建议。

答案 1 :(得分:1)

我在an ember feed reader中嵌套数据我正在努力。

我使用2个阵列控制器。我有一组Feed,每个Feed都包含条目。

对于我的用途,选择一个feed应该显示它包含的条目,我有一个feedController,一个selectedFeedController,一个entryController和一个selectedEntryController。

这让我可以进行相当精细的控制。希望这会促使你开始,也许可以弄清楚这不适合你。

答案 2 :(得分:0)

我假设在最后的清洗中,附加了项目清单的客户详细信息视图以及包含客户端所有活动项目的项目列表视图。

让用例指示对象模型,而不是对象模型决定用例。如果你需要上面的场景,如果你只有一个客户端ArrayController,你可能会跳过箍;在这种情况下,同时拥有客户端和项目ArrayControllers会更自然。

答案 3 :(得分:0)

我同意@David和@ebryn。这完全取决于用例。例如,您是否始终将用户和项目数据一起使用?然后就不需要单独的阵列控制器,特别是因为数据已经嵌套了。

但是如果你想明确区分问题那么你应该考虑两个独立的控制器。

另外,要从localstorage读取数据,您必须定义自己的适配器,没有内置方法。在自述文件末尾的ember data github page中详细介绍了构建自己的适配器的步骤。