2013-06-04 6 views
2

Я использую KnockoutJS с SammyJS для шаблонов на стороне клиента, а рамки Django В верхней панели моего приложения есть выпадающее меню для выхода пользователя из системы. Это код для этого кода -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, работала ссылка на выход из системы. Но теперь только URL-адрес браузера изменяется на «http://localhost:8000/user/logout/» (это правильный URL-адрес ссылки). Только после перезагрузки страницы пользователь может выйти из системы.

В моем файле JS, это единственная функция Сэого -

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», но он не работает. Как удалить эту проблему?

ответ

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'); 
+0

строка - «this.get ('', ...» было показано в учебнике KnockoutJS для перехода в папку «Active», даже если не был указан хэш. ve обновил мою функцию Sammy, и теперь работает выход из системы. Спасибо! –

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 не очень красиво ...

+0

Второй метод работает. Первый делает то же самое - изменяет url страницы на/user/logout, но не выполняет ее. Любой способ отключить Sammy для кликов, исходящих из определенного div (в данном случае - верхней панели)? –

+0

Я не думаю, что есть способ отключить SammyJS для конкретного DIV. Возможно, вы можете попробовать с location.assign (url). Я думаю, что это должно сработать (я отредактировал свой первый отрывок кода) – Jalayn