1

日付パラメーターを使用してイベントのコレクションを取得する ember ルートがあります。コレクションを取得するために逆シリアル化関数を使用しています。コレクションが取得されると、URL が「/day/2012-10-08」から「/day/undefined」に変更されます。

イベントには日付の範囲が含まれているため、データを使用して日付パラメーターをシリアル化することはできません。代わりに、URL のパラメーターを返すことができるはずです。以下の例では、デシリアライズ時にルーター「current_params」の属性を設定し、シリアライズ時にそれを返します。serialize メソッドで params にアクセスできるかどうか疑問に思っています。

      day: Ember.Route.extend
        route: "/day/:date"

        deserialize: (router, params) ->
          router.set('current_params', params)
          router.get('store').findQuery( App.Event, { date: params.date } )


        serialize: (router, context) ->
          router.get('current_params')

        connectOutlets: (router, context) ->
          router.get('applicationController').connectOutlet( 'timecard', context )
4

1 に答える 1

1

undefinedメソッドが失敗したときに名前付きルートが変更されるのを見てきました。serializeここには十分な情報がありませんが、そうであると強く疑っています。

そのような情報を保持するためにルーターに依存するのは間違いだと思います. アプリケーションの状態を維持するためだけに、任意の情報のリポジトリとして設計されていません。

私の提案は、その日付範囲情報をコントローラーに移動することです。したがって、コントローラーがそのTimecardController場合

TimecardController = Ember.ObjectController.extend
    #other controller stuff
    #more controller stuff

    event_date: new Date

次に、ルーターで

deserialize: (router, param) ->
    @get('timecardController').set 'event_date', params.date
    @get('store').findQuery App.Event, {date: params.date}
serialize: (router, context) ->
    date = @get('timecardController.event_date')
    #or on older ember builds @getPath('timecardController.event_date')
    '' + date.getFullYear() + '-' + (date.getMonth()+1) + '-' + date.getDate()
于 2012-12-13T03:55:41.453 に答える