1

私のbackbonejsアプリケーションでは、 ?example.com/?stat=#usersに移動すると、アプリは自動的にページをリロードします。router.navigate('users')

戻るボタンを押すと、URLが読み込まれるexample.com/#usersため、目的のページに正しくアクセスしてから読み込みexample.com/?stat=#usersます。

私が直面している問題は何ですかtrigger?オプションを変更しようとしましたが、修正できませんか?そして、私はそれが何であるかについてのより多くの情報を見つけることができません?state=#...(私は仮定をすることができますが、簡潔な文書は非常に役に立ちます)?

削除されたルートファイル:

class window.AppRouter extends Backbone.Router
  routes:
    "": "list"
    "users": "list"
    "user/:id": "userDetails"

  list: -> 
    @before()

  before: (callback) ->
    if @users?
      callback() if callback?
    else
      @users = new Users
      @users.fetch(
        success: ->
          $('#sidebar').html(new UsersView({model: app.users}).render().el)
          callback() if callback)

  userDetails: (id) -> 
    @before ->
      user = app.users.get( id)
      if user?
        console.log('inside if')
        app.showView( '#content', new UserView( {model: user}))

  showView: (selector, view) ->
    @currentView.close() if @currentView?
    $(selector).html(view.render().el)
    @currentView = view
    return view

私の削除されたビューファイル:

class window.UsersView extends Backbone.View
  tagName:'ul'
  className: 'nav nav-pills nav-stacked'
  initialize: ->
    @userViews = new Array
    @model.bind("reset", @render, this)
    @model.bind("add", (user) =>
      @$el.append( new UserInListView({model: user}).render().el))

  render: (event) ->
    _.each(
      @model.models
      (user) =>
        userView = new UserInListView( {model: user})
        @userViews.push( userView)
        @$el.append( userView.render().el)
      this)
    return this


class window.UserInListView extends Backbone.View
  tagName:"li"

  initialize: ->
    @template = _.template(tpl.get('user_in_list'))
    @model.bind("change", @render, this)
    @model.bind("destroy", @close, this)

  render: (event) ->
    @$el.html( @template( @model.toJSON()))
    return this

  events:
    "click a": "select"

  select: ->
    $("#sidebar>ul>li.active").removeClass("active")
    @$el.addClass( 'active')
    app.navigate("user/#{@model.id}", true)

class window.UserView extends Backbone.View
  initialize: ->
    templateName = 'user_edit'
    @template = _.template(tpl.get(templateName))
    @model.bind("change", @render, this)

  events:
    "click .cancel": "cancel"

  cancel: ->
    @remove()
    app.navigate('users', false)

何が原因なのかよくわかりませんが、それは拘束力ですか?それはtwitter-bootstrapですか?ルーターの設定方法ですか?URLに直接アクセスしても問題は発生しませんが、ルーターがそこに移動するとどうして問題が発生するのでしょうか。

4

1 に答える 1

1

問題は、またはタグnameに属性を含めることと関係があります[そして他の人もそうです]、タグに属性を含めることにより、属性はgetリクエストに含まれるため、navigateが呼び出されると、目的のページにアクセスしてからリクエストを実行しますパラメータが何であれ。<input><select>GETname

私の場合、name='state'セレクターにaを残しました(ユーザーにアクセスした後、実際にユーザーstateの状態が設定されていて、URLが設定されていてexample.com/?state=IL#users、この「状態」はアクセスされているバックボーンページの状態とは関係ありませんでした。 )。

于 2012-11-04T15:25:09.627 に答える