Node.js 在不使用window.location的情况下跟随链接
我希望你们都好 针对使用Backbone.js和node.js的应用程序的问题。 我想创建一个模型,然后自动转到使用新创建的模型构建的另一个uri: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
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();
});
}
以这种方式创建视图时,它将使用一个模型创建,该模型的属性中已包含邮件的所有数据。谢谢您的建议。。。我想你是对的,在这里使用主干路由器会更干净。