backbone.js中有多个hashtag路由

时间:2014-08-13 21:18:47

标签: javascript backbone.js hash routes

我有一个需要大量用户输入的项目。它基本上是一个有六个部分的拼图,这些部分是由标签路线触发的。够容易吧?我猜。

我现在有一个很棒的设置,当达到哈希值时(" www.website.com/index.html/#test"),第一件就会出现。现在,这很棒,但事实是,这些碎片可以随时以任何顺序触发。所以,如果我有以下路线 - " 1"," 2"," 3"等,它需要能够像:(&# 34; www.website.com/index.html/#3/#1/#2")或类似的东西。在我发现如何使其成为功能之后,我可以担心以后会让它看起来很好看。

这是我目前的路线代码 -

<script>
    $(function(){

    var hideOne = function () {
        //alert("hideOne");
        var elem = document.getElementById("one");
        elem.className = "hide";
    };

    var Workspace = Backbone.Router.extend({
      routes: {
        "test":"test",// #test
      },    
      test: hideOne
    });

    var router = new Workspace();
    Backbone.history.start(); 

});
</script> 

所以我的问题是;我该怎么做才能在backbone.js中有多个hashtag路由?

提前致谢。

-Mitchyl

1 个答案:

答案 0 :(得分:1)

你可以这样做。在哪里浏览stuff.com/path#hide/one/three 这里带有(/:x)的路线是动态匹配器。所以()表示它是可选的,并且:x表示它将把url片段的那部分的字符串值作为参数传递给路由匹配时调用的函数。因此,如果您的图像数量限制在非常小的范围内,我认为应该没问题。

<script>
  $(function(){
    var hideMany = function () {
      var toHide = [].slice.call(arguments);
      toHide.forEach(function (id) {
        if(id === null) { return }
        var elem = document.getElementById(id);
        if(elem) {
          elem.className = "hide";
        }
      });
    };

    var Workspace = Backbone.Router.extend({
      routes: {
        "hide(/:a)(/:b)(/:c)" : "test"
      },
      test: hideMany
    });

    var router = new Workspace();
    Backbone.history.start();

  });
</script>