SammyJS没有使用Django

时间:2013-06-04 13:06:04

标签: javascript django sammy.js

我将KnockoutJS与SammyJS一起用于客户端模板和Django框架 在我的应用程序的顶部栏中,有一个用户注销的下拉菜单。这是它的代码 -

<div class="pull-right user">
    <a href="#" role="button" class="dropdown-toggle" data-toggle="dropdown">
        <p><span id="topbar_first_name"></span></p> 
        <b class="caret"></b>
        <ul class="dropdown-menu" role="menu">
            <li><a tabindex="-1" href="{% url 'user:logout' %}">Logout</a></li>
        </ul>
    </a>
</div>

在我开始使用SammyJS之前,注销链接有效。但现在,只有浏览器的网址更改为“http://localhost:8000/user/logout/”(这是链接的正确网址)。只有在重新加载页面后,用户才能注销。

在我的JS文件中,这是Sammy的唯一功能 -

Sammy(function() {
    this.get('#:folder', function() {
        self.chosenFolderId(this.params.folder);
        $.get('/tasks/get', { folder: this.params.folder }, function(data) {
            self.tasks_list(data);
        });
    });

    this.get('', function() {
        this.app.runRoute('get', '#Active')
    });
}).run();

我尝试将'href'更改为外部链接(例如'www.stackoverflow.com')。在此之后,浏览器的网址会更改为“http://localhost:8000/www.stackoverflow.com”但不起作用。如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

我认为SammyJS正在接受你的电话。 您有两个选择,要么您可以在SammyJS中添加路由,以便将其重定向到正确的位置:

this.get('/user/logout', function() {
    location.assign('/user/logout');
});

...或者,直接写一个简单的函数绕过SammyJs来处理这种情况:

function goToExternaLink(url) {
   window.location = url;
}

然后使用a在您的onclick代码中调用此函数,如下所示:

<a tabindex="-1" onclick="goToExternalLink('{% url 'user:logout' %}')">Logout</a>

onclick不是很漂亮......

答案 1 :(得分:1)

该行:

this.get('', function() {
    this.app.runRoute('get', '#Active')
});

搞乱你的链接。这告诉SammyJS拦截所有链接。你想用这个来实现什么?我会做的是:

Sammy(function() {
   this.get('#:folder', function() {
       self.chosenFolderId(this.params.folder);
      $.get('/tasks/get', { folder: this.params.folder }, function(data) {
        self.tasks_list(data);
       });
    });

}).run('#Active');