1

スパイン アプリケーションに状態を取得しようとしています。クリックすると、項目がリストに追加されます。次に、URL が作成されてナビゲートされ、リストがレンダリングされます。ただし、ブラウザの「戻る」機能を使用すると、リストが前の状態に戻りません。これを機能させる方法は?

これは関連するコードです。無関係と思われるものは省略しましたが、さらに必要な場合は提供します。

class App extends Spine.Controller  
  constructor: ->
    super
    @products = new Products
    @filters = new Filters

    Filter.bind 'filterAdded', => @navigateAfterFilterChange()
    Filter.bind 'filterRemoved', => @navigateAfterFilterChange()

    Spine.Route.setup( history: false )

  renderAll: ->
    @products.render()
    @filters.render()

  navigateAfterFilterChange: ->
    Spine.Route.navigate( encodeURIComponent( JSON.stringify( _.map( Filter.active_filters, ( filter ) -> { t: filters.type, v: filters.value } ) ) ) )



class Filter extends Spine.Model
  listen: => #This is used to make the right list item listen to a click event
    $("'a[data-cid=\"#{ @id }\"]'").one 'click', @triggerFilter

  triggerFilter: (e) =>
    e.preventDefault()
    filter = Filter.find( $( e.currentTarget ).attr( 'data-cid' ) )
    if @active
      @active = false
      Filter.active_filters =  _.reject Filter.active_filters, (x) -> ( x.type is filter.type and x.value is filter.value )
      @save()
      Filter.trigger 'filterRemoved', @
    else
      @active = true
      Filter.active_filters.push filter
      @save()
      Filter.trigger 'filterAdded', @



class Filters extends Spine.Controller
  constructor: ->
    super
    @utils = new GeneralScripts
    @createFilters()
    @listenForTypeActivation()
    @routes
      "": ( params ) ->
        @render()
      "*glob": ( params ) ->
        @render()
4

1 に答える 1

0

確かではありませんが、render() でパラメータを送信する必要があるようです

class Filters extends Spine.Controller
  constructor: ->
    super
    @utils = new GeneralScripts
    @createFilters()
    @listenForTypeActivation()
    @routes
      "": ( params ) ->
        @render(params)
      "*glob": ( params ) ->
        @render(params)

もちろん、renderメソッドでparamsを処理する必要もあります

于 2013-04-17T19:40:06.933 に答える