2014-09-12 27 views
1

我在鏈接輔助器中使用query-params進行排序。它運作良好。不過,我需要在有人點擊鏈接時啓用反向排序選項。例如,第一次從A-Z排序,然後第二次點擊從Z-A排序的鏈接。任何想法如何實現這個?我已經嘗試了查詢參數子表達式助手,但似乎無法獲得來回切換的選項。基本上我需要使用標題和標題,因爲這是服務器期望它們進行排序的方式。我有一個Django後端。Ember.js使用鏈接查詢參數子表達式

控制器:

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

任何幫助將不勝感激。我覺得必須有一些我錯過的東西,並且一直沒能在Google搜索中找到它。

回答

1

正如您所指出的,您的後端迫使您通過接受title-titlesortBydirection合併爲一個屬性。

您需要的是當用戶單擊排序鏈接時,動態更改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'); 
     } 
});