1

我目前正在开发一个 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) 
        )

我的视图提供了两个日期选择器,允许用户指定她想要查看的时间范围(fromDatetoDate我的示例代码中)。

每当用户选择新的时间范围时,我的控制器上的两个观察到的变量都会更新,这将导致使用用户请求的时间范围向服务器发出新请求(updateMyModels()我的示例中的方法)。

所以,这是我的观点:如您所见,我目前正在控制器updateMyModels()方法中更新我的 ArrayController 的“内容”属性,该方法绑定到 UI 时间帧属性 - 我完全忽略了之前提供的路由模型。所以我路线上的模型属性只是为了“初始化”我的控制器而存在,这似乎有点奇怪......

一切正常,但我想知道是否有更好/正确的方法来做到这一点?

如果我应该使用路由提供的模型而不是控制器属性:有没有办法从控制器与路由的模型进行通信(我相信有办法;-)),更重要的是:如何重新加载我的控制器的当前路线?方法是否transitionTo()正确?

提前致谢!

4

1 回答 1

1

我遇到了类似的问题,最终删除了路由对象。仅当您访问 URL 参数时,路由才有意义。由于 MyModelRoute 不访问参数,只需将其删除。您仍然可以在其“init”方法中初始化控制器。

如果您在路径中对查询进行编码,情况会有所不同……例如“/my_model/fromDate/toDate”之类的。不过我不需要那个。所以我正在处理控制器中的所有内容。

于 2013-05-03T16:25:39.023 回答