【问题标题】:Using ember-data to perform a UI update with user defined parameters使用 ember-data 使用用户定义的参数执行 UI 更新
【发布时间】:2013-04-27 14:04:15
【问题描述】:

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

ArrayController 代码:

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() 方法是否正确?

提前致谢!

【问题讨论】:

    标签: model controller ember.js routes ember-data


    【解决方案1】:

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

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

    【讨论】:

    • 我也考虑过简单地删除路线类,但我很不确定 - 很高兴听到你有同样的情况并走那条路!我对路由类的模型属性有些困惑,绑定到特定路由的模型上下文的想法对我来说听起来不错,这就是为什么我试图在这个方向重构我的代码。我将删除路线类 - 谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多