2013-07-25 40 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