绑定节点路由到骨干路由

时间:2014-04-28 00:29:30

标签: javascript node.js backbone.js express

我正在尝试将路由从我的节点后端链接到我的前端的某个视图。 目标是拥有一个受密码保护的部分(可在/ admin访问),我们可以在其中添加新的博客帖子。因此,在某些时候,我希望能够呈现登录模板,如果用户进行身份验证,则显示一个表单,用于创建新的博客帖子。

这是该项目的github:https://github.com/quantumlicht/collarbone/tree/master/q-trivia_stacked

我在 server / routes / blog_admin.js 中的服务器上创建了一条路线 这服务于/ admin,模板包含一个id通常包含骨干视图的div,但它没有,这就是为什么我想弄清楚,但我找不到网上的例子。

在我的骨干路由器文件中,我定义了管理路由,它提供了正确的视图,但只有当我转到/ #admin。时才会这样做。

有没有办法可以将这个BlogPostContainerView绑定到/ admin?我需要使用其他路由器吗?这是我需要在服务器或前端代码上做的事情吗?

我对这个框架相当新,所以不要犹豫,或许分享最佳实践或更好的解决方案。

1 个答案:

答案 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与服务器端渲染结合使用,但对我而言,这有点像使用螺丝刀锤击钉子。

希望这有帮助!