2012-11-02 47 views
1

當在我backbonejs應用程序,應用程序,當我瀏覽到router.navigate('users')自動重新加載頁面example.com/?stat=#users自動加載頁面`?狀態=#users`?Backbonejs應用程序導航到`#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) 

我只是不知道是什麼原因造成這一點,它是一個結合?它是嘰嘰喳喳引導?這是我設置路由器的方式嗎?當我直接訪問網址時,我怎麼會遇到問題,但是當我的路由器在那裏導航時,我呢?

+0

''路由器''用戶'路由的回調方法中的代碼是什麼? – Cyclone

+0

@Cyclone好的,只是擴展了代碼。 – rudolph9

+0

我不確定是什麼問題:( 您是否在初始化路由器時創建了'pushState:true'?如果是,您可以嘗試沒有? 如果'app.navigate('users',false) '是路由器導航,那麼我不認爲第二個參數不是如何傳遞的,可能你可以看看[documentation](http://backbonejs.org/#Router-navigate)。 – Cyclone

回答

1

問題已經與包括name屬性上<input><select>標籤[和我相信其他人],通過在標籤的屬性包含在GET請求,這樣屬性導航時調用它訪問然後用name參數執行GET請求。

就我而言,我留在選擇一個name='state'(我訪問實際上有他們的state即他們住在一套和URL狀態的用戶後,實現了example.com/?state=IL#users而這個「國家」是不恰當的骨幹網頁的狀態被訪問)。