【问题标题】:Bind Node routes to backbone routes将 Node 路由绑定到骨干路由
【发布时间】:2014-04-28 00:29:29
【问题描述】:

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

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

我在服务器上创建了一个路由 server/routes/blog_admin.js 这用于 /admin 并且模板包含一个 div,其 id 通常包含主干视图,但它没有,这就是我试图弄清楚但我在网络上找不到示例的原因。

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

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

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

【问题讨论】:

    标签: javascript node.js backbone.js express


    【解决方案1】:

    客户端路由(在您的 Backbone 路由器中注册)与服务器端路由(在 expressjs 中注册)完全分开。骨干路由通过检查浏览器地址栏中 URL 中的锚标记来工作(由 #hashtag 字符后跟一些文本表示)。当 Backbone 在您的地址栏中看到“#/admin”时,它会创建并呈现一个视图;当“/admin”在你的地址栏中时,Backbone 会忽略它,你的浏览器会像对待任何其他 HTTP GET 请求一样对待它,并调用服务器上的 /admin 路由。

    通常在 Backbone webapp 中,您将在路由器中注册一个路由函数,该函数创建一个模型和一个视图。该模型有一个名为url 的属性,它指向您服务器上的某个位置; 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>"));
      }
    });
    

    请注意,此示例希望您的服务器在模型向“/admin”发出请求时只返回一堆 JSON。这不适用于您当前的服务器端路由,它会呈现并返回一堆 HTML 而不是对象或数组。

    根据我的经验,当您使用 Backbone 创建单页 web 应用程序时,您会在客户端执行所有 HTML,然后使用您的服务器向其发送数据。我想您可以将 Backbone 与服务器端渲染结合使用,但对我来说,这有点像用螺丝刀敲钉子。

    希望这会有所帮助!

    【讨论】:

    • 我编辑了我的帖子以指定,最终目标是创建一个受密码保护的部分,将它与核心应用程序分开对我来说是有意义的,因此我尝试在其上渲染模板/admin 而不是 /#admin。这样做有意义吗?
    • 欧兹所说的。 Backbone 不会查看 # 之前的任何内容,并且 # 之后的所有内容都不会由浏览器发送到服务器。您可以让服务器上的 /admin 呈现一个页面,将 javascript 中的路由设置为#something?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-31
    • 1970-01-01
    • 2013-02-21
    • 1970-01-01
    相关资源
    最近更新 更多