从Backbone调用没有哈希的直接路由

时间:2013-07-09 00:50:01

标签: node.js backbone.js

我可能以错误的方式解决这个问题,但请耐心等待:

在我的server.js中我得到了这个

tweetThisThing = require('./lib/kustomtwitter'),

app.get('/tweet/:msg', function(req, res){
var tweet = req.params.msg;
tweetThisThing(tweet); // le magic
    res.redirect('/cars');
});

当我将浏览器定向到http://localhost:3000/tweet/This will be tweeted时,成功发送了一条推文。

当我尝试通过Backbone调用相同的快速端点时,如下所示:

在我的Backbone脚本中,我得到了这个

app.navigate('tweet/' + theMessageThatWillBeTweeted,  {trigger:true, replace: true});

,Backbone总是在路由中强制哈希,然后无法发送推文http://localhost:3000/#tweet/This will not be tweeted

我知道这是预期的行为,一些“解决方法”涉及将 pushState:true 添加到我的Backbone脚本中,但我似乎无法使其正常工作。

是否有一种简单的方法可以获得我想要的行为或者我需要为这个特定用例设置骨干路径?

1 个答案:

答案 0 :(得分:1)

如果使用

打开pushState
Backbone.history.start({pushState: true});

没有替代方法是绕过Backbone,只需使用jQuery.get。例如:

$.get('tweet/' + theMessageThatWillBeTweeted, function(result) {
   // Also instead of redirecting you could output the twitter response code
   // and verify the request was a success here
   console.log(result);
});

顺便说一句,使用GET可能不是最好的方法。使用POST可能会更好,这会为您提供更多灵活性和更清晰的网址。