我正在尝试创建一个基本的webapp,在达到特定的URL时显示图像。在这种情况下,我使用的是backbone.js的哈希系统。
我正在尝试这样做,以便在到达“www.website.com/index.html#1”时,使用我拥有的一些JavaScript显示第一张图片。我也需要它,以便在达到“www.website.com/index.html#1/#3/#5”时,显示第一张,第三张和第五张图像。我知道我必须使用多条路线才能做到这一点,但我不知道如何做。
我有一条工作路线,第一张图片非常棒。我只是不知道如何调整它以便它适用于多个路线。
这是工作哈希 -
<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>
很棒,它很有效,它甚至不刷新页面。但是当我尝试添加另一条路线时,一切都失败了。就像,如果我在"test1":"test1"
下添加"test":"test"
,则原来的"test":"test"
将不再有效(当然,新的{{1}}也不会有用。)
我甚至尝试过复制+粘贴整个代码块并尝试创建一个全新的路由代码块。这也行不通。我真的很难过。
任何建议都很棒。
由于
答案 0 :(得分:0)
您应该限制第一个用例的范围。暂时不要依赖外部功能。做点什么
routes: {
"test":function(){
alert("test");
},
"test2":function(){
alert("test2");
}
},
然后改为
routes: {
"test":"test",
"test2":"test2"
},
{
test: function(){
alert("test");
},
test2: function(){
alert("test2");
}
}
了解详情:http://mrbool.com/backbone-js-router/28001#ixzz3ANyS0hkR
一旦你有了这个工作,然后就开始研究DOM操作了。
答案 1 :(得分:0)
routes: {
"?*:queryString": 'showImages'
},
showImages: function(queryString) {
console.log(queryString); // #1#3#5
}
您可以使用路线"?*:queryString"
来匹配此网址“www.website.com/index.html#?#1#3#5”。
将调用函数“showImages”并在#1#3#5
参数中传递值queryString
。
答案 2 :(得分:0)
所以从StackOverflow上发布的其他问题,以及我自己发布的一些问题,一些优秀的用户帮助了我,我已经解决了它。
这是我必须使用的代码 -
<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>
因此,当您输入“www.website.com/index.html#hide/ID1/ID2/ID3”时,它会隐藏包含您输入的ID的元素。
我不完全理解它,但我正在努力将其分解并弄清楚它是如何工作的。谢谢你的帮助,伙计们!