2

我正在使用带有 SammyJS 的 KnockoutJS 进行客户端模板,以及 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 之前,注销链接有效。但是现在,只有浏览器的 url 变成了 ' http://localhost:8000/user/logout/' (这是正确的链接 url )。只有在重新加载页面后,用户才能退出。

在我的 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”)。在此之后,浏览器的 url 更改为 ' http://localhost:8000/www.stackoverflow.com' 但它不起作用。如何消除这个问题?

4

2 回答 2

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不是很漂亮...

于 2013-06-04T14:55:13.890 回答
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');
于 2013-06-04T21:23:53.930 回答