2012-11-02 49 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而这个“国家”是不恰当的骨干网页的状态被访问)。