1

Rails を介してタスク オブジェクトをいくつかのデフォルト値でセットアップし、knockout.js でそれらのデフォルト値を使用するようにしたい Rails アプリがあります。

現在起こっていることは、Rails コントローラーのデフォルトが、knockout.js の監視可能なコマンドの空白にすぐに置き換えられることです。

これが私のレールコントローラーです

def new
  @task = Task.new
  @task.task_date = Time.now
end

私のノックアウト

Task = ->
  @name = ko.observable()
  @task_date = ko.observable()

私のフォーム

= f.text_field :task_date, "data-bind" => "value: name"
= f.text_field :task_date, "data-bind" => "value: task_date"

デフォルトの「render :new」を使用する代わりに、コントローラーから JSON を渡す必要がありますか?

Railsのデフォルトをまったく使用できますか?

4

1 に答える 1

2

私が正しく理解している場合は、ビューをレンダリングしていて、Rails が問題のフィールドに値を書き込んでから、それをノックアウトして DOM にバインドし、 observable値がないためフィールドを空白にします。

  1. ページ内のモデルの値を json としてレンダリングします
  2. 値を取得するためにajax経由で往復します
  3. ページ マークアップで値をレンダリングし、モデル用にこれらの値を抽出する

オプション 1 と 3 はサーバーにとって簡単で、ページに対する 1 つの要求のみが必要です。data-*クライアント側の #1 は、データをモデルにマッピングしてバインドするだけの単純なものですが、#3 はマークアップからコードを抽出する必要があります (つまり、データを要素の属性に入れる場合)。コレクションなどを考慮して、値をモデルに最初にバインドするためのスキームを考え出すのは、より多くの作業です。

オプション 2 では、html を取得するためと json を取得するために 2 回のトリップが必要です。html get でデータベースをスキップするコードを追加しない限り、データベースへのリクエストも 2 倍になります。イク。

[編集] またgon、私が使用していない gem と、これらの手法を実際に示している RailsCasts のスクリーンキャストもあります: http://railscasts.com/episodes/324-passing-data-to-javascript

于 2012-05-02T20:02:33.883 に答える