当我点击一个按钮时,我会在View with中找到点击:
events:{
'click .parameter-input a': 'saveParameter'
},
在saveParameter函数中,我这样做:
saveParameter: function(ev) {
parameter.value = $('.parameter-input .param').val();
console.log(parameter.value);
router.navigate("#/page2/" + parameter.value, {trigger:true});
return false;
}
我的路线定义如下:
var Router = Backbone.Router.extend({
routes: {
"": "home",
"page2/*parameter": "UIpage2",
}
});
var page1 = new Page1();
var page2 = new Page2();
var router = new Router;
router.on('route:home', function() {
page1.render();
console.log("page1 render");
})
router.on('route:UIpage2', function(parameter){
page2.render();
console.log("page2 render " + parameter.value);
})
Page2的定义如下:
var Page2 = Backbone.View.extend({
el:'.page',
render: function() {
var template = _.template($('#page2').html(), {parameter: parameter});
this.$el.html(template);
}
});
当我导航到页面时,如何强制使用page2渲染再次刷新.page?第2页上的渲染永远不会被调用..
编辑:参数是从某个输入框中取出的字符串值,需要在网址中显示,如mydomain.com/#/page2/parameter和第2页的某些div。
答案 0 :(得分:1)
哈希不应该在路由中,所以替换
router.navigate("#/page2/" + parameter.value, {trigger:true});
通过
router.navigate("page2/" + parameter.value, {trigger:true});
另外,请确保使用Backbone.history.start()
初始化了Backbone历史记录。
这是一个最小的工作示例。
var Router = Backbone.Router.extend({
routes: {
"": "index",
"bar": "bar",
"page2/*parameter": "foo"
},
index: function() {
console.log("on page index");
},
bar: function() {
console.log("on page bar");
},
foo: function(data) {
console.log("on page foo with data: " + data);
}
});
var router = new Router();
console.log("router created");
Backbone.history.start();
console.log("initializing backbone history");
router.navigate("bar", {trigger: true});
router.navigate("page2/foobar", {trigger: true});
答案 1 :(得分:0)
如果您的网址中有www.xyz.com/#route1
并且您再次尝试执行router.navigate('route1', {trigger: true});
,则不会触发route1
的路由处理程序,因为您已经在route1
如果您需要刷新页面,即重新渲染第2页,只需致电page2.render();
。
如果你想使用路由器,你必须暂时改变路线,然后路由到你需要的页面。(注意:这将在路线历史中添加和不必要的输入。)例如:如果你是已经在route1
即www.xyz.com/#route1
并且您想要重新渲染视图,请执行以下操作 -
router.navigate('temp', {trigger : false});
以上行将更改地址栏中的URL,但不会调用任何路由处理程序。之后打电话
router.navigate('route1', {trigger : true}); // this will now re-render view