javascript - 使用 Backbone.js 是否需要使用表单标签?

标签 javascript forms backbone.js

我的问题是我是否需要使用表单标签?

如果我不使用 javascript,我会使用表单标签,它会自行提交。我的意思是我没有在客户端编写任何代码。像这样 (w3schools.com)

<form name="input" action="html_form_action.asp" method="post">
  Username: <input type="text" name="user">
  <input type="submit" value="Submit">
</form>

使用 Backbone.js 我使用事件:在 View 内捕捉提交按钮上的点击,然后保存模型。像这样:

events: {
"click #submit": "SaveData",
},
SaveData: function(){
  /*javascript to save model or post using ajax */
}

显然我在第一个示例中需要表单标签,但如果我使用 ajax/javascript,我是否需要它?

谢谢,

安德鲁

最佳答案

My question is do I ever need to use the form tag?

不,您永远不需要使用表单标签。所有主干通信都通过 ajax。

是的,正如其他人提到的,您可以选择构建您的表单标签、HTML、URL 和服务器端代码,以便它们在通过常规表单提交和整页加载使用时正常工作。

我从不使用表单标签,原因如下:

  • 我构建我的 Backbone API URI 以匹配 REST 约定,我的页面 URI 只是有时与那些相关
  • 我认为即时自动保存是一种非常出色的交互模式,所以当您选中任何复选框时,我会发送一个 AJAX PUT,您的更改会立即保存,而无需提交按钮或整个页面加载。请注意,Backbone.Model 的默认行为是发送整个记录,这不是我个人的偏好,但与 REST 相比,我更倾向于 RPC 思维方式。
  • 我可能不想将我的服务器编码为同时以单页方式和多页方式工作,因为这样做比基本的单页方式困难得多并且不值得付出努力,除非你有情有可原的情况要求这个。
    • 单页应用程序只需要一个基本的 index.html、一个专门返回 JSON 的 REST API 和一大堆浏览器 JS
    • 如果您希望能够通过整页加载处理您的部分或全部操作,您需要进行更多的服务器端编码,以呈现与您的主干浏览器代码将执行的操作完全匹配的服务器端 HTML。你需要类似 airbnb/rendr 的东西,轻描淡写一点都不简单。由于您的示例表示一个 ASP 服务器,所以在 ASP 和 Backbone 之间共享模板很有趣。
  • 如果您根本不包括 form 标记,您就知道您不必测试它们。如果包括它们,则意味着它们可能有效,然后您可能应该测试它们。
  • 如果您根本不包含 form 标记,那么您的服务器上就不必担心一组意外的 HTTP 请求。更清楚你的意图。它是一个 AJAX/JSON API。没关系,接受它。

关于“禁用 javascript 的用户”这件事——请停止这样说。任何人都可以指出在启用 JS 时使用 backbone.js 并且可以在禁用 JS 的情况下运行的单个 Web 应用程序吗?我认为从来没有人写过。另外,这感觉就像是十年前的时间扭曲。如果你正在构建一个主干应用程序,那么你就会完全投入到 JS 中。如果您希望您的站点在没有 JS 的情况下工作,请不要使用主干,使用传统的多页面 Web 应用程序框架。

关于javascript - 使用 Backbone.js 是否需要使用表单标签?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17866163/

相关文章:

javascript - 我如何创建一个可以调用任何方法的 JS 对象?

javascript - 通过在 jQuery 中单击将 INPUT FILE 值复制到 INPUT TEXT

javascript - 在 Backbone JS 中保存后引用 "this" View 回调处理程序(成功或错误)的正确方法

javascript - 有什么办法可以用当前的 IE9 beta CSS 做文本阴影吗?

Javascript 文件链接无法正常工作

javascript - React-native:在从存储中获取数据之前渲染 View

css - 如何在 Mac 上设置样式选择标签

c# - 用JS禁用提交按钮后,文件下载后重新启用

Backbone.js - this.$(selector) 和 this.$el.find ('selector' 之间的区别

javascript - 主干 View 事件未触发