【问题标题】:Find query concept for route and controller查找路由和控制器的查询概念
【发布时间】:2013-10-01 08:05:13
【问题描述】:

我的问题有点笼统。在 ember 中使用 findQuery 的路由和控制器的最佳概念是什么。

我有带有数据过滤功能的 api。数据请求由

执行
this.store.findQuery('dataModel', {"q": JSON.stringify({"filters": filters})});

之后我在表格视图中显示它们。过滤器由模板中的表单视图更新。

我目前的解决方案: 表单视图设置控制器参数和来自控制器的按钮调用动作。控制器动作加载参数,执行findQuery 和set('content',data)。

在大多数情况下,我在 Route 中看到了带有定义 model: function() .. 的概念,而在 setupController: function(controller, model) 中看到了带有 controller.set('content',model) 的概念。我喜欢这个“集合”,因为“内容”是 RecordArray(不是 PromiseArray),我可以轻松地将它用于数据表和其他 JavaScript 插件。我觉得我的解决方案不好。

【问题讨论】:

    标签: ember.js ember-data


    【解决方案1】:

    我认为你的概念是正确的,我一直在使用以下流程:

    在您的路由器中:

    App.Router.map(function() {
        this.resource('search', { path: '/query/:filters' });
    });
    App.SearchRoute = Ember.Route.extend({
        model: function(params) {
           return this.store.findQuery('dataModel', {"q": JSON.stringify({"filters": params.filters})});
    });
    

    在您的 html 中,只需绑定将导致新搜索路线的操作, 如下所示:

    <button {{action "doSearch"}}>Search</button>
    

    在您的控制器中:

    App.SearchController = Ember.ArrayController.extend({
    ...
    actions: {
        doSearch: function() {
            var query = buildYourQueryObject();
            this.transitionToRoute("search",  query);
        }
    }
    

    点击按钮后,应用程序将转换到您的搜索路径,“查询”将被序列化并发送到 Route,Route.model() 将尝试根据提供的序列化参数填充。

    注意:代码已被简化,您可能需要添加更多内容才能使其正常工作

    【讨论】:

      猜你喜欢
      • 2013-03-21
      • 1970-01-01
      • 2015-10-09
      • 2011-04-13
      • 2011-02-18
      • 2023-02-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多