如何根据动态段设置查询参数的默认值?

时间:2015-05-27 08:06:50

标签: ember.js

我正在为某些实体创建通用网格。为此,我在路线中添加了这个:

this.route('record', { path: '/record' },function() {
   this.route('index', {path: '/:entity'});
   this.route('view', {path: '/:entity/:record_id'});
});

并创建了新的"索引"路线:

export default Ember.Route.extend({
  entity: '',

  queryParams: {
    sort: {
      refreshModel: true
    }
  },

  beforeModel: function(transition) {
    var entity = transition.params[this.get('routeName')].entity;

    this.set('entity', entity);
  },

  model: function(params) {
    delete params.entity;

    return this.store.findQuery(this.get('entity'), params);
  },
}

我的控制器

export default Ember.ArrayController.extend({
  queryParams: ['sort'],

  sort: ''
}

如何设置"排序"的默认值?基于动态细分? 例如,在我的设置中,我存储了所有entites的排序值:

'settings.user.sort': 'email ASC',
'settings.company.sort': 'name ASC',

我试图定义"排序"作为计算属性,但它的" get"当我无法从currentHadlerInfo或路由获取动态段的值时,会及时调用方法。

同时定义属性" sort"因为计算属性具有奇怪的效果,例如,当我将其定义为

sort: 'email ASC'

在我的模板中,它按预期通过{{sort}}显示(电子邮件ASC)。 但是当我从compute属性返回一个值时,我在模板中看到空值,这会影响组件的工作(我无法获得当前的排序列)

我该怎么办?

1 个答案:

答案 0 :(得分:0)

以下是基于动态段值设置排序属性的粗略实现。代码看起来像

<script type="text/x-handlebars" data-template-name="index">
  {{#link-to 'sort' model.settings.user.sort}}Sort{{/link-to}}
</script>

<script type="text/x-handlebars" data-template-name="sort">
  <ul>
  {{#each arrangedContent as |item|}}
    <li>{{item.val}}</li>
  {{/each}}
  </ul>
</script>

var settings = Em.Object.create({
  settings: {
    user: {
      sort: 'val ASC'
    }
  }
});

App.Router.map(function() {
  this.route('sort', {path: '/:sortParams'});
});

App.SortRoute = Ember.Route.extend({
  params: null, 

  model: function(params) {
    this.set('params', params);
    return [{val:1}, {val:5}, {val:0}];
  },

  setupController: function(controller, model) {
    this._super(controller, model);

    var props = this.get('params').sortParams.split(' ');
    var property = [props[0]];
    var order = props[1] === 'ASC'? true : false;

    controller.set('sortProperties', property);
    controller.set('sortAscending', order);
  }
});

The working demo can be found here.

如您所见,我访问model钩子中的params对象并将其存储在路径上。在setupController挂钩中,我访问了参数并在控制器上设置了所需的值。