Ember.js使用链接查询params子表达式

时间:2014-09-12 17:27:34

标签: javascript ember.js

我在link-to helper中使用query-params进行排序。它运作良好。但是,当有人点击链接时,我需要启用反向排序选项。例如,第一次从A-Z排序,然后第二次击中链接,它将从Z-A排序。知道如何实现这个吗?我已经尝试过query-params子表达式助手,但似乎无法获得来回切换的选项。基本上我需要使用title和-title,因为这是服务器期望它们进行排序的方式。我有一个Django后端。

控制器:

App.PostsIndexController = EmberArrayController.extend({
queryParams: ['sortBy'],
sortBy: 'title',
direction: null,
}); 

我也试过了:

sortBy: 'title:-title"

路线:

App.PostsIndexRoute = Ember.Route.extend({
queryParams: {
 sortBy: {
  refreshModel: true
}
},

model: function (params)
  return this.store.find('post', {
   sort: params.sortBy
  })
}

});

我也尝试在排序后添加这个:params.sortBy

direction: params.direction

模板:(摘录)

{{#link-to 'posts' (query-params sortBy="title" direction=-title:title)}}A-Z
    <span class="caret"></span>
{{/link-to}}

我也试过了:

{{#link-to 'posts' (query-params sortBy="title" direction="-title:title")}}A-Z
    <span class="caret"></span>
{{/link-to}}

非常感谢任何帮助。我觉得必须有一些我遗漏的东西,而且无法在谷歌搜索中找到它。

1 个答案:

答案 0 :(得分:1)

正如您所指出的,您的后端通过接受sortBydirection强迫您将title-title合并为一个属性。

当用户单击排序链接时,您需要能够动态更改sortBy属性的值。我会在您想要触发排序的链接中添加{{action 'clickSort'}},然后在控制器中定义该操作。

由于您已设置refreshModel: true,因此sortBy属性的任何更改都会自动对您的后端进行另一次REST调用。

以下是一个例子:

App.PostsIndexController = EmberArrayController.extend({
    queryParams: ['sortBy'],
    sortBy: 'title',

    actions: {
        clickSort: function() {}
            if ( this.get('sortBy') === 'title' )
                this.set('sortBy', '-title');
            else
                this.set('sortBy', 'title');
        }   
});