2013-03-18 65 views
2

我是AngularJS的新手,我目前正在使用Django/Tastypie API构建一个webapp。这个Web应用程序的工作原理与职位和API调用(GET)看起来像:

{ 
    title: "Bootstrap: wider input field - Stack Overflow", 
    link: "http://stackoverflow.com/questions/978...", 

    author: "/v1/users/1/", 

    resource_uri: "/v1/posts/18/", 
} 

请求这些对象,我创建了嵌入宣布类似以下资源的角度的服务:

Post: $resource(ConfigurationService.API_URL_RESOURCE + '/v1/posts/:id/') 

一切正常像一个魅力,但我想解决两个问题:

  1. 如何正确替换author字段的值?换句话说,如何尽可能自动地请求每个参考字段?
  2. 如何缓存该值以避免在同一端点上进行多次调用?

再一次,我是angularJS的新手,我可能错过了我对于$resource对象的理解。

谢谢, Maxime。

回答

1

关于问题一,我知道没有微不足道的开箱即用解决方案。我想您可以使用自定义response transformers启动附属$资源请求,并将这些请求中的promises附加为响应对象的属性(代替URL)。最近版本的$资源工厂allow you to specify这样一个变压器用于$资源实例。您将委派全局默认响应转换器($ httpProvider.defaults.transformResponse)来获取您的实际JSON,然后替换属性并从那里启动辅助请求。请记住,当委托这种方式时,即使文档中只提到一个,我也会传递第一个TWO而不是ONE参数。

有没有办法知道什么时候每一个最后的承诺已经完成,但我认为你不会有任何代码将取决于这种知识(因为它是常见的,你的用户界面只是绑定到零碎模型对象本身就是一个承诺,由原始HTTP请求返回)。

至于问题二,我不确定你是否指的是你的主对象(在这种情况下$ scope应该足以作为保留引用的方法),或者你建议下载的这些辅助对象作为在客户端组装聚合的手段。假设后者,我想你可以做一些事情,比如维护一个哈希关联到你的$范围内的对象的URL,并且你的子$资源请求上的成功函数更新这个字典。然后你可以让我上面描述的响应转换器首先检查哈希,看看它是否已经获得了所需的资源实例,只有当这样的本地副本不存在时才从后端获取$资源。

这是所有在客户端组装资源的一大堆工作(以及往返),因为只需在应用程序层中组装聚合并将其预先煮好即可。 REST对数据标准化没有任何期望。

+0

我想你是对的。我会让前端变得更容易,并“预先煮熟”:) 感谢您的回答,我想我因此开始拖延! – Maxime 2013-03-19 07:47:24

+0

很高兴为您服务,@Maxime。 – Jollymorphic 2013-03-19 14:45:04