javascript - 将 Node 路由与 Backbone 路由绑定(bind)

标签 javascript node.js backbone.js express

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

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

我在服务器上创建了一条路由 server/routes/blog_admin.js 这服务于/admin,模板包含一个带有 id 的 div,通常包含主干 View ,但它不包含,这就是我试图找出答案的原因,但我无法在网络上找到示例。

在我的主干路由器文件中,我定义了管理路由来提供正确的 View ,但只有当我转到/#admin 时它才会执行此操作。

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

我对这个框架还很陌生,所以请毫不犹豫地分享最佳实践或更好的解决方案。

最佳答案

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

通常在 Backbone Web 应用程序中,您将在路由器中注册一个路由函数,该函数创建模型和 View 。该模型有一个名为 url 的属性,它指向服务器上的某个位置; Backbone 获取存储在该位置的数据并将其填充到您的模型中。然后,您的 View 使用该模型的内容在屏幕上呈现一些 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 与服务器端渲染结合使用,但对我来说,这感觉有点像用 Screwdriver 敲钉子。

希望这有帮助!

关于javascript - 将 Node 路由与 Backbone 路由绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23330739/

相关文章:

javascript - 检测到 iPad 时更改字体大小

node.js - Nodejs如何发布多个数组

javascript - Backbone.js - 如何从集合中获取对象文字数组?

node.js - 在 NodeJS 中监听 createReadStream 上的 'data' 事件时,写入 createWriteStream 的文件被损坏

javascript - 未捕获的类型错误 : undefined is not a function rails3/backbone/js

javascript - Backbone 在 View 中加载 View (作为部分)

javascript/jquery 如何设置多个属性

JavaScript - 查找下一次更改的日期(标准或夏令时)

javascript - 为什么react-native中默认 View 宽度是100%?为什么使用alignItems时没有默认宽度?

javascript - 通过 node.js 中的多个字段对 JSON 进行分组