将控制器 属性 暴露给路由的模型函数

Expose controller property to route's model function

我已经在控制器中为分页定义了一些属性:

import Ember from 'ember';

export default Ember.ArrayController.extend({
  limit: 1,
  skip: 0,
  pageSize: 1
  }
});

我想在路由的 model 函数中访问 limit,但我不知道如何访问。

import Ember from 'ember';

export default Ember.Route.extend({

   model: function(params) {

      console.log(this.get('controller').get('limit')) <- doesnt work for example
      return this.store.find('post', {limit: 1,
                                      sort:'createdAt desc'});
   }
});

也许您应该看一下 queryParams 选项 (http://emberjs.com/guides/routing/query-params/)。

使用查询参数,您可以将限制设置为 URL 中的查询参数,例如 http://yourdomain.com/someroute?limit=15

您的控制器将变为:

export default Ember.ArrayController.extend({
    queryParams: ['limit'],  // Here you define your query params
    limit: 1                 // The default value to use for the query param
});

您的路线将变为:

export default Ember.Route.extend({
    model: function(params) {
        return this.store.find('post', {
            limit: params.limit, // 'limit' param is available in params
            sort:'createdAt desc'
        });
    }
});

选择:

如果您不想使用查询参数,另一种解决方案可能是在其中一个父路由的控制器中定义限制 属性。通过这样做,您可以通过以下方式访问模型挂钩中的 属性:

this.controllerFor('parentRoute').get('limit');