2012-05-10 51 views
0

我首先說我主要是前端設計人員/開發人員,而且對MVC沒有經驗。使用TowerJS創建登錄表單

我想用TowerJS創建一個登錄表單。我的大多數應用程序都是從文檔開箱即用的;我所說的單一模式「用戶」:

class App.User extends Tower.Model 
    @field "email", type: "String" 
    @field "userName", type: "String" 
    @field "password", type: "String" 
    @field "active", type: "Boolean", default: -> true 

    @validates "userName", presence: true 
    @validates "email", presence: true, format: /\[email protected]\w+.com/ 
    @validates "password", presence: true 

    @timestamps() 

對於「新的」用戶視圖包括我的「形式」部分:

formFor @user, (f) -> 
    f.fieldset (fields) -> 
    fields.field "email", as: "string" 
    fields.field "userName", as: "string" 
    fields.field "password", as: "string" 
    fields.field "active", as: "string" 
    f.fieldset (fields) -> 
    fields.submit "Submit" 

如果我用的是「形式」的部分爲我登錄形式,它將包括我不想要的領域(例如「主動」)。如果我使用新的名爲「登錄」:

formFor @user, (f) -> 
    f.fieldset (fields) -> 
    fields.field "email", as: "string" 
    fields.field "password", as: "string" 
    f.fieldset (fields) -> 
    fields.submit "Submit" 

那麼表單不會渲染,因爲它看起來像塔,因爲它傳遞@user期待所有User領域的形式。這真正歸結爲我對模型渲染的高層缺乏瞭解。在我心中有兩個選項進行渲染這個登錄表單是:

  1. 使用「形式」的全部局部和隱藏/忽略通過CSS /後端-JS無關的領域分別或...
  2. 創建一種僅包含我關心的登錄字段(電子郵件,密碼)的新模型,然後在該模型上使用formFor。這對我來說似乎很愚蠢,因爲我正在處理用戶,所以我覺得直覺上我應該使用User模型。

也許答案在於創建一個Session模型,但我不確定所有這些部件如何在TowerJS中一起工作。要清楚,問題是:什麼是正確的使用TowerJS呈現登錄表單的方式?

回答

0
  1. 僅在需要的字段中創建名爲_login.coffee的app/views /用戶中的新文件。就像這樣:

    formFor @user, (f) -> 
        f.fieldset (fields) -> 
        fields.field "email", as: "string" 
        fields.field "password", as: "string" 
        f.fieldset (fields) -> 
        fields.submit "Submit" 
    
  2. 編輯文件app /視圖/用戶/ new.coffee使這並讀取partial "form"行現在讀取partial "login"

現在您的視圖應該正確呈現。當然,你現在存儲的口令明文,等等,但是這完全是另外一個故事...

+0

是的,我知道這是有效的,因爲你正在使用用戶控制器的「新」動作,但我將如何添加一個名爲登錄和路由它的新動作?我正在考慮路由:'@match「/ login」,以:「users#login」'和用戶控制器: 'login: - > resource = new App.User @render「login」 但這不起作用。 –

+0

是的,我是個白癡。我甚至不知道我以爲你在問什麼。 –

1

試試這個:

formFor @user, (f) -> 
    f.fieldset (fields) -> 
    fields.field 'email', as: 'string' 
    fields.field 'userName', as: 'hidden' 
    fields.field 'password', as: 'string' 
    fields.field 'active', as: 'hidden' 
    f.fieldset (fields) -> 
    fields.submit 'Submit' 

此外,根據該文檔風格指南,你應該使用盡可能使用單引號。