我在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}}
非常感谢任何帮助。我觉得必须有一些我遗漏的东西,而且无法在谷歌搜索中找到它。
答案 0 :(得分:1)
正如您所指出的,您的后端通过接受sortBy
或direction
强迫您将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');
}
});