2013-07-25 21 views
1

我的问题是我需要使用窗体标签吗?使用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的我用的事件:内部视图捉对提交按钮点击,然后保存模型。像这样:

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

很显然,我需要在第一个例子中的表单标签,但如果我使用AJAX/JavaScript的我以往任何时候都需要它吗?

感谢,

安德鲁

回答

2

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

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

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

我从来没有使用表单标签,这里的原因:

  • 构建我的骨干API URI来匹配REST约定,而我的网页URI只是有时关联到那些
  • 我想立即自动保存是一个极大优秀的交互模式,所以当你检查任何复选框时,我会发送一个AJAX PUT,并且您的更改会立即保存,无需提交按钮或整页加载。请注意,Backbone.Model的默认行为是发送整个记录,这不是我个人的偏好,但我更像是RPC心态vs REST。
  • 我可能不希望编码我的服务器在单页时尚和多页面时尚中工作,因为这样做比基本的单页风格困难得多,不值得花费精力,除非你有情有可原的情况要求这个。
    • 单页的应用程序只需要一个基本的index.html,一个REST API是专门返回JSON和浏览器的一大堆JS
    • ,如果你想能够处理通过整页的部分或全部业务加载时,您需要更多的服务器端编码来呈现服务器端HTML,该HTML完全符合您的骨干浏览器代码的功能。你需要像airbnb/rendr之类的东西,而且它不重要。由于你的例子表明一个ASP服务器,所以ASP和主干之间有趣的共享模板。
  • 如果不包括所有的form标签,你就知道你没有对其进行测试。如果你包含它们,你就意味着它们可能工作,然后可能你应该测试它们。
  • 如果您根本没有包含form标签,那么您的服务器上可能会出现一组意外的HTTP请求。它更清楚你的意图。这是一个AJAX/JSON API。没关系,拥抱它。

整体而言,“JavaScript禁用的用户”的事情 - 请停止这样说。任何人都可以指向一个单独的Web应用程序,当启用JS时可以使用backbone.js,并且可以在禁用JS的情况下运行?我认为从来没有人写过。另外,它会像十年前的时间扭曲一样。如果你正在构建一个骨干应用程序,那么你完全是JS。如果您希望您的网站在没有JS的情况下运行,请不要使用骨干网,而应使用传统的多页Web应用程序框架。

+0

通过使用表单,您可以避免大量的验证和事件绑定问题,以便您可以单独捕获'submit'按钮'clicks';对我来说这是值得的。 – Mathletics

+1

我同意你的答案。如果输入的'name'属性与骨干模型属性相对应,则使用表单标记非常有用。你可以使用几个小的underscore.js函数序列化表单,并将对象设置为你的模型。 –

+0

是的,但是DOM <->模型绑定(如Knockback或类似)可能是更好的选择。 –

1

你并不需要,但我认为你SHOULD,如果它是一个FORM

因为编写语义标记会更好。

下面是一篇文章谈论语义HTML,供大家参考: https://www.adobe.com/devnet/html5/articles/semantic-markup.html

+0

JavaScript重载应用程序的语义标记更具有新颖性。我认为让同事的生活更轻松仍然是一个好习惯,但是在JavaScript重度应用程序中,SEO并不是很糟糕?标记可能甚至不会被抓取。 –

+0

没有考虑语义方面。也许我应该,但我已经有足够的手了。骨干应用程序将很难扫描。 :-) – KingAndrew

1

Ps:我重新读你的问题,并注意到它谈到了骨干特定的环境。我并不了解Backbone,但以下内容应该适用于一般情况。

作为生活中的大多数事情,答案取决于它。

考虑一种情况,如果您在关注窗体的任何输入时按下enter键,它将自动提交表单。如果您单击提交类型的按钮/输入,它将提交表单。因此,您可能只需侦听表单提交事件,阻止默认操作,然后触发您的ajax查询。如果您已经有适当的表单,那么您可以使用http://api.jquery.com/serialize/来收集ajax请求的所有表单字段。

大多数情况下,我只是让他们在那里。阅读标记时,意图很清楚。如果表单有data-ajax="true",那么我知道它是启用了ajax的。从表格的action属性中,我知道相应的服务器url。我不需要寻找相应的js文件来知道这个表单将被提交到哪里。

+0

链接优点+1 – KingAndrew