url使用backbone.js发送

时间:2012-12-06 08:10:10

标签: django backbone.js

我在django开发应用程序并使用backbone.js。使用骨干路由器路由URL。我的HTML在一个静态页面中,当我点击一个链接,例如href="/user/home",一个页面被加载,如果我刷新浏览器(发送一个http请求)与url,我得到错误404,因为django urls don'有那个网址。

我有一个senario,我正在使用facebook(django_facebook)登录,每当我点击Facebook登录链接时,我都会得到一个空白页面(就像其他任何无效网址一样,因为这个* splats - {"*action" : "defaultRoute"}请参阅下面的代码),当我刷新浏览器时,它可以正常工作(打开fb标签进行登录。)因为我在URLS.PY中有url(r'^facebook/', include('django_facebook.urls'))

我的问题是如何点击链接并打开fb选项卡或弹出窗口,因为在这种情况下它不起作用,我必须在浏览器中点击URL才能使其工作。

backbone.js路由器

Api.Routers.MainRouter = Backbone.Router.extend({
routes: {
    ":user/messages/:action/:target": "messagesAction",
    ":user/challenge/:action/:target" : "gameScores",
    ":user/challenge/:action/:target/:bet" : "challengeResult",
    ":user/challenge/:action": "challengeAction",
    ":user/:action" : "userAction",
    ":user/friends/:action/:target" : "friendsAction",
    "*action" : "defaultRoute"
},
messagesAction: function (user, action, target) {
    myScrollAction = action;
    conversationAction (action);
    //HIGHTLIGHT FOOT NAV
    $(".selected").removeClass("selected");
    $("#nav-messages").parents("li").addClass("selected");

    $(".message-friend-name").html(target.replace(/%20/g, " "))
},
challengeResult: function (user, action, target, bet) {
    defaultRouterAction (action);
    myScrollAction = action;
    ...

感谢。

1 个答案:

答案 0 :(得分:0)

所以听起来你在这里问了两个问题。

第一个问题涉及你的Backbone路由器中有你的Django App没有的路由。

因此,当路由器接管它时,实际上会将新历史记录推送到浏览器的历史堆栈中(除非您在使用哈希片段时处于IE8和9中)。这意味着当您点击重新加载时,您的浏览器将从服务器请求该资源。

为了防止404s发生,你要么必须不使用历史对象,要么确保你的Backbone路由器中存在的所有路由都在你的Django URL配置中被镜像。

您遇到的第二个问题是使用Facebook登录。您应该将问题的这一部分分开并重新询问,因为它也与您正在使用的Django插件有关,如果您这样做,您将获得更好的牵引力。