我目前正在开发一个 ember.js 应用程序,使用 ember-data 及其 RESTAdapter 与我的服务进行通信。
我定义了所需的 ember-data 模型,一切似乎都运行良好,但我不太确定,如果我朝着正确的方向前进 - 所以这将是一个“那个解决方案好吗?”的问题。
我们的服务 API 提供了一种方法来获取限制在请求时间范围内的记录 - REST 请求参数如下所示:
{ from: ..., to: ... }
我的 UI 的用户应该能够选择一个时间范围,并且 UI 应该在请求的时间范围内更新数据。
暂时不会有写入操作 - 这是一个只读 UI。
这是我目前的解决方案:
我定义了一个为请求结果提供模型的路由类和一个为 UI 提供服务的 ArrayController。
路线类别代码:
MyModelRoute = Ember.Route.extend
model: ->
# Calling controller to get the required parameters for the initial
# model setup - this doesn't feel right too, but I want to keep the
# time frame parameters for the JSON request at one position (controller)...
controller = @controllerFor('my_models')
# get fromDate and toDate from controller
MyModel.find({from: fromDate, to: toDate})
数组控制器代码:
MyModelController = Ember.ArrayController.extend
updateMyModels: ->
# ... some boring code to get fromDate and toDate ...
# Overwriting the content property which was previously set by
# route's model property seems to be nasty...
myModels = MyModel.find({from: fromDate, to: toDate})
myModels.one('didLoad', =>
@set('content', myModels)
)
我的视图提供了两个日期选择器,允许用户指定她想要查看的时间范围(fromDate
在toDate
我的示例代码中)。
每当用户选择新的时间范围时,我的控制器上的两个观察到的变量都会更新,这将导致使用用户请求的时间范围向服务器发出新请求(updateMyModels()
我的示例中的方法)。
所以,这是我的观点:如您所见,我目前正在控制器updateMyModels()
方法中更新我的 ArrayController 的“内容”属性,该方法绑定到 UI 时间帧属性 - 我完全忽略了之前提供的路由模型。所以我路线上的模型属性只是为了“初始化”我的控制器而存在,这似乎有点奇怪......
一切正常,但我想知道是否有更好/正确的方法来做到这一点?
如果我应该使用路由提供的模型而不是控制器属性:有没有办法从控制器与路由的模型进行通信(我相信有办法;-)),更重要的是:如何重新加载我的控制器的当前路线?方法是否transitionTo()
正确?
提前致谢!