单击事件中的Sammy JS路由

时间:2014-07-30 11:11:11

标签: javascript url-routing sammy.js

只是想确保我和SammyJS一起做正确的事,因为它并不像我一样。

我在代码中处理了一个click事件,必须在代码中处理。所以..我想要发生以下事情:

  1. 用户点击按钮并运行代码。
  2. 代码导航到新路线事件。
  3. 调用路由处理程序代码。 (也更新URL)
  4. 我找到了以下方法:

    1. 用户点击按钮 - 同时调用EventContext.redirect方法和app.runRoute方法。
    2. 我是SammyJS的新手,但是我使用了durandal,在这种情况下,我使用了router.navigate方法,我找不到直接的等效方法。

      执行上述操作后,更新了URL并运行了路由,因此我得到了我想要的内容,但感觉有点笨拙。有没有更好的方法呢?

2 个答案:

答案 0 :(得分:0)

app.setLocation('#/YourPathHere');

window.location = '#/YourPathHere';

来自文档:

Sammy.Application setLocation(new_location) 委托location_proxy设置当前位置。有关位置代理的详细信息,请参阅Sammy.DefaultLocationProxy。 参数

new_location新的位置字符串(例如'#/')

http://sammyjs.org/docs/api/master/Sammy.Application.methods.setLocation

答案 1 :(得分:0)

您可以为指定的链接设置路线,Sammy应该在点击这些链接时自动路由到路线事件。 在路线中,您可以通过ajax加载内容或重定向到另一个页面。 一个小例子:

HTML:

<section id="navi"> 
  <a href="#/1">One</a>
  <a href="#/2">Two</a>
  <a href="#/3">Three</a>
</section>

JS:

;(function($) {
  var app = $.sammy(function() {
    this.get('#/:page', function() {
      var jmnu = $( 'a[href="#/' + this.params['page'] + '"]' );
      // do whatever you want to do before pageload
      // even trigger click events manual

      // and then load page:
      $('#main').html('<p>this is site ' + this.params['page'] + '</p>');
    });
 });

  $(function() {
    app.run('#/1')
  });
})(jQuery);

看演示: http://jsfiddle.net/0qpx7dob/