4

我正在开发一个概念验证应用程序,我有一个关于数据存储的问题。

我的应用程序有一个客户端模型

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

4 回答 4

1

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

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

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

于 2012-06-03T08:25:03.043 回答
1

我在正在使用的 ember 提要阅读器中嵌套了数据。

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

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

这允许我进行相当细粒度的控制。希望这会促使您开始,并可能弄清楚这是否不适合您。

于 2012-06-04T15:46:52.717 回答
0

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

让用例决定对象模型,而不是对象模型决定用例。如果您需要上述场景,如果您只有一个客户端 ArrayController,您可能会遇到麻烦;在这种情况下,同时拥有客户端和项目 ArrayControllers 会更自然。

于 2012-06-03T23:01:18.923 回答
0

我同意@David 和@ebryn。这完全取决于用例。例如,您是否总是一起使用用户和项目数据?这样就不需要单独的数组控制器,尤其是因为数据已经嵌套。

但是,如果您想明确分离关注点,那么您确实应该考虑两个单独的控制器。

同样要从本地存储中读取数据,您必须定义自己的适配器,没有内置方法。自述文件末尾的ember 数据 github 页面详细说明了构建您自己的适配器的步骤。

于 2012-06-04T03:26:15.440 回答