2012-07-10 76 views
3

好吧,我认为这是简单的,但我很愚蠢的看到它。下面是使用主干样板方法骨干路由器不能正常工作使用样板

require([ 
    "app", 

    // Libs 
    "jquery", 
    "backbone", 

    // Modules 
    "modules/example" 
], 

function(app, $, Backbone, Example) { 

    // Defining the application router, you can attach sub routers here. 
    var Router = Backbone.Router.extend({ 
    routes: { 
     "": "index", 
     "item" : 'item' 
    }, 

    index: function() 
    { 
     console.info('Index Function'); 
     var tutorial = new Example.Views.Tutorial(); 

     // Attach the tutorial to the DOM 
     tutorial.$el.appendTo("#main"); 

     // Render the tutorial. 
     tutorial.render(); 
    }, 

    item: function() 
    { 
     console.info('Item View'); 
    } 
    }); 

    // Treat the jQuery ready function as the entry point to the application. 
    // Inside this function, kick-off all initialization, everything up to this 
    // point should be definitions. 
    $(function() { 
    // Define your master router on the application namespace and trigger all 
    // navigation from this instance. 
    app.router = new Router(); 

    // Trigger the initial route and enable HTML5 History API support 
    Backbone.history.start({ pushState: true, root: '/reel' }); 
    }); 

    // All navigation that is relative should be passed through the navigate 
    // method, to be processed by the router. If the link has a data-bypass 
    // attribute, bypass the delegation completely. 
    $(document).on("click", "a:not([data-bypass])", function(evt) { 
    // Get the anchor href and protcol 
    var href = $(this).attr("href"); 
    var protocol = this.protocol + "//"; 

    // Ensure the protocol is not part of URL, meaning its relative. 
    if (href && href.slice(0, protocol.length) !== protocol && 
     href.indexOf("javascript:") !== 0) { 
     // Stop the default event to ensure the link will not cause a page 
     // refresh. 
     evt.preventDefault(); 

     // `Backbone.history.navigate` is sufficient for all Routers and will 
     // trigger the correct events. The Router's internal `navigate` method 
     // calls this anyways. 
     Backbone.history.navigate(href, true); 
    } 
    }); 

}); 

我运行这个MAMP服务器的,当我输入localhost我在骨干代码:8888 /盘,我得到的是自带的样板的例子索引页面。但是,当我输入Localhost:8888/reel/item或Localhost:8888/reel /#item时,无法找到页面或将其导回到我的索引页面。

我的问题是我做错了什么。我需要使用htaccess吗?这看起来不错。有没有一种使用骨干来排序的方法。对不起,如果这真的很简单,只是无法让我的头。

回答

1

问题可能在于pushState标志。

对于处理请求去一路到服务器,它看到完整的URL和响应它不管它会怎么做?

没有,如果你有一个

$(function(){ 
     setTimeout(navMe, 2000); 
}); 
function navMe() { 
     backbone.navigate("item"); 
} 
它的工作

这样的方式2秒后加载它将导航到项目视图,你知道它是因为请求去服务器而不是主干。