【发布时间】:2014-01-06 22:30:05
【问题描述】:
我正在构建一个数据之间存在许多关系链接的网站。例如,用户可以创建bookings,其中将包含booker 和bookee,以及可以附加到booking 的messages 数组。
一个示例 json 将是...
booking = {
id: 1,
location: 'POST CDE',
desc: "Awesome stackoverflow description."
booker: {
id: 1, fname: 'Lawrence', lname: 'Jones',
},
bookee: {
id: 2, fname: 'Stack', lname: 'Overflow',
},
messages: [
{ id: 1, mssg: 'For illustration only' }
]
}
现在我的问题是,您将如何在您的 Angular 应用程序中对这些数据进行建模?而且,虽然非常相关,但您将如何从服务器中提取它?
如我所见,我有几个选择。
一次从服务器拉取所有东西
在这里,我将依靠服务器来序列化嵌套数据并只使用给定的 json 对象。缺点是我不知道在请求预订或类似对象时会涉及哪些用户,因此我无法缓存它们,因此每次请求时我都会提取大量数据。
以 booker/bookee 为用户ids 拉取预订
为此,我会为我的数据模型使用 Promise,并让服务器返回一个对象,例如...
booking = {
id: 1,
location: 'POST CDE',
desc: "Awesome stackoverflow description."
booker: 1, bookee: 2,
messages: [1]
}
然后我会将其传递给 Booking 构造函数,该构造函数将通过各自的工厂将相关的(booker、bookee 和 message)ID 解析为数据对象。
这里的缺点是许多 ajax 请求用于单个预订请求,尽管它使我能够缓存用户/消息信息。
总之,是依靠单个 ajax 请求一次收集所有嵌套信息,还是依靠各种请求来“充实”事后的初始响应是更好的做法。
如果有帮助,我正在使用 Rails 4(也许 Rails 更适合单个请求?)
【问题讨论】:
-
我看到有人投票结束了这个问题,如果你能让我知道我能做些什么来改进它,那将不胜感激。
-
这个问题有点笼统,这就是为什么?你也没有说明你的堆栈。
-
我认为声明堆栈似乎有点多余,因为这里的问题是客户端并且与一般的 http 传输有关。看到它是关于通过 RESTFul 接口 ajax'ing 数据,我认为它不是必需的。但你是对的,我会尽量让它更具体。
-
使用 ngResource 来获取数据,它的声音是你所需要的。另请查看本教程 -> shellycloud.com/blog/2013/10/…。如果还有其他问题,请随时提出,我刚刚在同一个堆栈上做了同样的事情。
-
也使用一个请求,
Active Model Serializers非常容易嵌套数据,然后在使用 Angular 获取数据时创建关系对象。
标签: javascript ruby-on-rails ajax angularjs relational-database