0

私は主にフロントエンドのデザイナー/開発者であり、MVC の経験はほとんどありません。

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: /\w+@\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"

ログイン フォームに "form" パーシャルを使用すると、不要なフィールド ("active" など) が含まれます。「ログイン」と呼ばれる新しいパーシャルを使用する場合:

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

Userフォームが渡されて以来、Tower はフォーム内のすべてのフィールドを予期していたように見えるため、フォームはレンダリングされません@user。これは、モデルがどのようにレンダリングされるかについて、私が高いレベルで理解していないことが原因です。このログイン フォームをレンダリングするための 2 つのオプションは次のとおりです。

  1. 「フォーム」パーシャル全体を使用し、css/back-end-js を介して無関係なフィールドを非表示/無視するか、または...
  2. ログインに必要なフィールド (電子メール、パスワード) のみを含むある種の新しいモデルを作成し、formFor代わりにそのモデルで使用します。私はユーザーを扱っているので、これはばかげているように思えるので、Userモデルを使用する必要があると直感的に感じています。

おそらくその答えはSessionモデルの作成にありますが、これらすべてのパーツが TowerJS でどのように連携するかはわかりません。明確にするために、質問は次のとおりです。TowerJS を使用してログインフォームをレンダリングする適切な方法は何ですか?

4

2 に答える 2

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'

また、ドキュメントのスタイルガイドによると、可能な限り一重引用符を使用する必要があります。

于 2012-11-08T14:36:01.923 に答える
0
  1. app/views/users に _login.coffee という名前の新しいファイルを作成し、必要なフィールドのみを指定します。このような:

    formFor @user, (f) ->
      f.fieldset (fields) ->
        fields.field "email", as: "string"
        fields.field "password", as: "string"
      f.fieldset (fields) ->
        fields.submit "Submit"
    
  2. ファイル app/views/users/new.coffee を編集して、読み取りを行っていた行が となるようにしpartial "form"ますpartial "login"

これで、ビューが正しくレンダリングされるはずです。もちろん、パスワードをプレーンテキストなどとして保存するようになりましたが、それはまったく別の話です...

于 2012-05-10T17:41:22.437 に答える