1

私はember pre 1.0を使用して単純なソート/ページネーションコントローラーを書いています。ユーザーがテーブルの列ヘッダーをクリックしたときに、コントローラーの並べ替えプロパティを変更したいと考えています。ルーターの sortUser メソッドを指す単純なアクションヘルパーがありますが、ルートが「username」や「id」などのパラメータとして使用できる生の文字列を渡すことができないようです

また、私のURLが壊れているようです(このURLを取得しています)

http://localhost:8000/#/sort/undefined

それ以外の

http://localhost:8000/#/sort/username

前もって感謝します

<table width="250px">
<thead>
<th><a {{action sortUsers "id" href=true}}>id</th>                                        
<th><a {{action sortUsers "username" href=true}}>username</th>
<th>update</th>
<th>delete</th>
</thead>
<tbody>

これが私のルーターです(複雑さを取り除いていますが、ネストされたルートです)

PersonApp.Router = Ember.Router.create({
  root: Ember.Route.extend({
    index: Ember.Route.extend({
      route: '/',
      paginateUsers: Ember.Route.transitionTo('paginated'),
      sortUsers: Ember.Route.transitionTo('index.sort.index'),
      connectOutlets: function(router, context) {
        router.get('applicationController').connectOutlet('person', router.get('store').findAll(PersonApp.Person));
      },
      index: Ember.Route.extend({
        route: '/'
      }),
      paginated: Ember.Route.extend({
        route: '/page/:page_id',

        connectOutlets: function(router, context) {
          router.get('personController').set('selectedPage', context.page_id);
        },

        exit: function(router) {
          router.get('personController').set('selectedPage', undefined);
        }
      }),
      sort: Ember.Route.extend({
        route: '/sort/:column',

        serialize: function(router, context) {
          if (context) { return { sort: context.sort } }
          return {sort: undefined}
        },

        deserialize: function(router, context) {
          return { sort: context.column }
        },

        connectOutlets: function(router, context) {
          router.set('personController.sortProperties', ['username']);
          router.get('personController').set('selectedPage', 1);
        },

アップデート

私は今、これの完全なjsfiddleを実行しています(サイドフィルター+ページネーションに沿った並べ替え)

4

1 に答える 1

1

問題の原因となっている 2 つの小さな問題が組み合わさっている可能性があると思います。

  1. sortUsers アクションは、ソート ルートの下のインデックス ルートを指しています。あなたが含めたコードにはそのようなルートはありません。sort/:column ルートしか表示されません。

    昨日、これに似たルートを取得するのに問題があり、「コンテキスト」を正しくするために次のようなものになりました。あなたがそれをしなければならないかどうかはまったくわかりませんが、それでうまくいきました。

    sortUsers: function(router, event) {
      // you can now also console.log here as suggested by sly7_7
      router.transitionTo('index.sort', event.context);
    },
    
  2. シリアル化/逆シリアル化の方法が正しくないようです。それらは問題ないかもしれませんが、私の外部の観点からは壊れているように見えます。シリアル化は、「コンテキスト」として持っているものをすべて取得し、それを url パラメーターに変換する必要があります。逆シリアル化は逆のことを行い、シリアル化が入力として取得するものとまったく同じものを返す必要があります。

    serialize: function(router, context) {
      return {
        column: context // you are passing a string so let's just put that in the url as is 
      }
    },
    deserialize: function(router, urlParams) {
      return urlParams.column; // just return the straight string from the url
    }
    

欠けている詳細があるかもしれませんが、移行を実行するためのいくつかの変更のようです。

また、ルーターが何をしているかをログに記録するように依頼してください...そうすれば、進行状況をよりよく追跡することもできます. enableLogging: 真

于 2012-09-21T13:51:46.340 に答える