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

Ember.js 如何根据动态段设置查询参数的默认值?,ember.js,Ember.js,我正在为一些实体创建通用网格。为此,我在routes中添加了以下内容: this.route('record', { path: '/record' },function() { this.route('index', {path: '/:entity'}); this.route('view', {path: '/:entity/:record_id'}); }); 并创建了新的“索引”路线: 我的控制器 export default Ember.ArrayController.

我正在为一些实体创建通用网格。为此,我在routes中添加了以下内容:

this.route('record', { path: '/record' },function() {
   this.route('index', {path: '/:entity'});
   this.route('view', {path: '/:entity/:record_id'});
});
并创建了新的“索引”路线:

我的控制器

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

  sort: ''
}
如何设置基于动态段的“排序”的默认值? 例如,在我的设置中,我存储所有实体的排序值:

'settings.user.sort': 'email ASC',
'settings.company.sort': 'name ASC',
我试图将“sort”定义为computed属性,但当我无法从currentHadlerInfo或route获取动态段的值时,会及时调用它的“get”方法

另外,将属性“sort”定义为computed属性也会产生奇怪的效果,例如,当我将其定义为

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


我能做什么?。

这里是一个基于动态段值设置排序属性的粗略实现。代码如下所示

<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);
  }
});

{{{#链接到'sort'model.settings.user.sort}}sort{{/link to}
    {{{#每个内容都作为|项}排列
  • {{item.val}}
  • {{/每个}}
var设置=Em.Object.create({ 设置:{ 用户:{ 排序:“val ASC” } } }); App.Router.map(函数(){ this.route('sort',{path:'/:sortparms'}); }); App.SortRoute=Ember.Route.extend({ 参数:null, 型号:功能(参数){ 此.set('params',params); 返回[{val:1},{val:5},{val:0}]; }, 设置控制器:功能(控制器、型号){ 这是超级控制器(控制器、型号); var props=this.get('params').sortparms.split(“”); var属性=[props[0]]; 变量顺序=道具[1]=“ASC”?真:假; controller.set('sortProperties',属性); controller.set('sortAscending',order); } });

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

<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);
  }
});