我正在尝试将路由从我的节点后端链接到我的前端的某个视图。 目标是拥有一个受密码保护的部分(可在/ admin访问),我们可以在其中添加新的博客帖子。因此,在某些时候,我希望能够呈现登录模板,如果用户进行身份验证,则显示一个表单,用于创建新的博客帖子。
这是该项目的github:https://github.com/quantumlicht/collarbone/tree/master/q-trivia_stacked
我在 server / routes / blog_admin.js 中的服务器上创建了一条路线 这服务于/ admin,模板包含一个id通常包含骨干视图的div,但它没有,这就是为什么我想弄清楚,但我找不到网上的例子。
在我的骨干路由器文件中,我定义了管理路由,它提供了正确的视图,但只有当我转到/ #admin。时才会这样做。
有没有办法可以将这个BlogPostContainerView绑定到/ admin?我需要使用其他路由器吗?这是我需要在服务器或前端代码上做的事情吗?
我对这个框架相当新,所以不要犹豫,或许分享最佳实践或更好的解决方案。
答案 0 :(得分:1)
客户端路由(在Backbone路由器中注册)与服务器端路由(使用expressjs注册)完全分开。骨干路由的工作方式是检查浏览器地址栏中URL的锚标记(由#hashtag字符后跟一些文本表示)。当Backbone看到"#/ admin"在地址栏中,它会创建并呈现视图;当" / admin"在你的地址栏中Backbone忽略它,你的浏览器像任何其他HTTP GET请求一样处理它,并调用服务器上的/ admin路由。
通常在Backbone webapp中,您将在路由器中注册路由功能,以创建模型和视图。该模型有一个名为url
的proerty,它指向服务器上的某个位置; Backbone获取存储在该位置的数据并将其填充到您的模型中。然后,您的视图使用该模型的内容在屏幕上呈现一些HTML:
var myRouter = Backbone.Router.extend({
"routes": {
"users/admin": "getAdmin"
},
"getAdmin": function() {
var model = new MyModel();
var view = new MyView({
"model": model
});
model.fetch({
"success": function() {
view.render();
}
});
});
var MyModel = Backbone.Model.extend({
"url": "/admin"
});
var MyView = Backbone.View.extend({
"render": function() {
$("body").append($("<p>" + JSON.stringify(model.attributes) + "</p>"));
}
});
请注意,此示例要求您的服务器在模型向&#34; / admin&#34;发出请求时返回一堆JSON。对于当前的服务器端路由,它不会正常工作,它会呈现并返回一堆HTML而不是对象或数组。
根据我的经验,当您使用Backbone创建单页Web应用程序时,您可以在客户端执行所有HTML并只使用服务器向其发送数据。我想你可以将Backbone与服务器端渲染结合使用,但对我而言,这有点像使用螺丝刀锤击钉子。
希望这有帮助!