Javascript Angular.js有效地访问和显示嵌套模型
我现在正在构建一个站点,其中数据之间有许多关系链接。例如,用户可以进行Javascript Angular.js有效地访问和显示嵌套模型,javascript,ruby-on-rails,ajax,angularjs,relational-database,Javascript,Ruby On Rails,Ajax,Angularjs,Relational Database,我现在正在构建一个站点,其中数据之间有许多关系链接。例如,用户可以进行预订,这将有预订者和预订者,以及可以附加到预订的消息数组 json的一个例子是 booking = { id: 1, location: 'POST CDE', desc: "Awesome stackoverflow description." booker: { id: 1, fname: 'Lawrence', lname: 'Jones', }, bookee: { id: 2,
预订
,这将有预订者
和预订者
,以及可以附加到预订
的消息数组
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
为此,我将对我的数据模型使用承诺,并让服务器返回一个对象,例如
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更适合于单个请求?我将使用一个系统,通过为我的所有资源创建一个基类,该基类将被赋予一个自定义的解析
函数,我希望在这个系统中,我能两全其美,这将知道该特定类中的哪些字段可能需要解析。示例资源函数如下所示
class Booking
# other methods...
resolve: ->
booking = this
User
.query(booking.booker, booking.bookee)
.then (users) ->
[booking.booker, booking.bookee] = users
其中,它将booker
和bookee
字段的值传递给用户
工厂,该工厂将具有如下构造函数
class User
# other methods
constructor: (data) ->
user = this
if not isNaN(id = parseInt data, 10)
User.get(data).then (data) ->
angular.extend user, data
else angular.extend this, data
如果我向User
构造函数传递了一个无法解析为数字的值(因此这将很乐意接受stringids
和numeric),那么它将使用User
factorysget
函数从服务器检索数据(或者通过缓存系统,实现显然在get
函数本身内部)。但是,如果检测到该值为非NaN,那么我将假设用户已经被序列化,并使用该值扩展它
因此,它在缓存方式上是不可见的,与服务器返回嵌套对象的方式无关。允许模块化ajax请求,并避免通过缓存系统重新下载不必要的数据
一旦一切就绪并开始运行,我将编写一些测试,看看应用程序是否可以更好地处理更大的、分块的ajax请求,还是上面提到的更小的模块化请求。无论哪种方式,这都可以让您通过Angle工厂传递所有模型数据,这样您就可以依靠每个记录继承了您可能想要使用的任何原型方法se.我看到有人投票结束了这个问题,如果你能让我知道我能做些什么来改进它,我将不胜感激。这个问题有点太宽泛了,这就是为什么?你也没有说明你的堆栈。我假设说明堆栈似乎有点多余,因为这里的问题是客户端的,并且与一般http传输有关。看起来这是关于通过RESTFul界面生成ajax数据的,我认为这不是必需的。但是你说得对,我会尽量让它更具体。使用ngResource获取数据,它的声音就是你所需要的。也可以查看本教程->。如果还有其他问题可以问,我已经在同一个堆栈上做了同样的事情。我们e使用活动模型序列化程序
也可以很容易地嵌套数据,然后在使用Angular获得数据时创建关系对象。