Node.js 在不使用window.location的情况下跟随链接

Node.js 在不使用window.location的情况下跟随链接,node.js,backbone.js,express,Node.js,Backbone.js,Express,我希望你们都好 针对使用Backbone.js和node.js的应用程序的问题。 我想创建一个模型,然后自动转到使用新创建的模型构建的另一个uri: MessageView = Backbone.View.extend({ events : { 'click #button' : 'go here' } go here : function(model) { var message = new Message({model : model)}; var id

我希望你们都好

针对使用Backbone.js和node.js的应用程序的问题。 我想创建一个模型,然后自动转到使用新创建的模型构建的另一个uri:

MessageView = Backbone.View.extend({
  events : {
    'click #button' : 'go here'
  }
  go here : function(model) {
    var message = new Message({model : model)};
    var id = message.get('id');
    // go to uri '/messages/id'
现在,我已经使用Express设置了我的应用程序,因此我想在这里向服务器发出一个真正的GET请求,调用新创建的模型中的数据。因此,我希望加载页面,而不仅仅是更改视图。 一种方法是(我认为)只需要

window.location = 'messages/'+id;
正如上面的最后一行,但我似乎有这样的印象,这是不好的做法为骨干一般。 否则,只需在render方法内部创建消息模型,然后在渲染视图时将其id直接写入按钮的href中,但这看起来也很混乱:

render : function() {
  var message = new Message({model : model)};
  var id = message.get('id');
  $('a #button').attr('href', '/messages/'+id);
}

有没有办法让我用一种更优雅的方式来设置它?提前谢谢

确实要将浏览器页面更改为新的窗口位置吗?这样做将导致所有javascript和其他内容都必须重新加载。如果需要调用GET to server以获取该模型id的信息,则只需对具有id属性的模型调用fetch

从您这里的小代码来看,这可能更符合您要做的事情:

MessageView = Backbone.View.extend({
  events : {
     'click #button' : 'go_here'
  },

  go_here : function(model) {
     //myID is the id of your message you want to get from the server
     //I'll leave it up to you on how you get the id of what you 
     //want from that button

     //I'll also assume that you have a router setup somewhere
     //to handle navigation
     MyApp.MyRouter.navigate("messages/"+id, {trigger: true});
  }
});
然后,在路由器中,您将有一个路由设置来监视:

routes: {
    "messages/:id" : "showMessage"
}
在您的
showMessage
功能中:

showMessage: function(id) {
    var message = new Message({id: id});
    message.fetch({success: function(model) {
        //render view of for the message to be shown
        var messageView = new MessageView({model: model});
        messageView.render();
    });
}

以这种方式创建视图时,它将使用一个模型创建,该模型的属性中已包含邮件的所有数据。

谢谢您的建议。。。我想你是对的,在这里使用主干路由器会更干净。