0

これはおそらく簡単な質問です。Rails インスタンス オブジェクトを使用してノックアウト ビューモデルを設定できますか? たとえば、mysite.com/person/1 に編集ページがあります。コントローラーはその人を見つけ、ビューは @person を使用してそのデータをレンダリングできます。

@person を使用してビューモデルを設定できますか? お気に入り:

self.name = ko.observable(@person.name);
4

1 に答える 1

4

はい。ただし、変数を erb などで出力する必要があります。

ko.observable("<%=  @person.name %>");

ただし、一般的に、特定の変数を特定のオブザーバブルに渡したくはありません。リソース自体をビュー モデルの新しい I スタンスに渡し、そこからビュー モデル変数を設定します。より良い例で更新します。私がコンピューターに着いたとき、しかし基本的に:

ko.applyBindings(new viewModel("<%= resource.to_json.html_safe %>"));

より良い例で更新

私が大まかにこのように構成した人のビューモデルは、括弧に注意してください。なぜそれらが必要なのか正確にはわかりませんが、正しく覚えていれば、括弧なしでは機能しません。

var personViewModel = function(person){

  var self = this;
  self.first_name = ko.observable(person.first_name);
  self.last_name = ko.observable(person.last_name);
  self.friends = ko.observableArray(person.friends);

}

person_json = <%= (@person.to_json.html_safe) %>;

ko.applyBindings(new personViewModel(person_json));

ただし、最近はビュー モデルに coffeescript を使用するのが好きです。各ビュー モデルのクラスとして、これは同じように動作するコードです (関数の代わりにクラスを使用して動作します)。

view_models/personviewmodel.js.coffee

class PersonViewModel
  constructor: (person) ->
    @first_name = ko.observable(person.first_name)
    @last_name = ko.observable(person.last_name)
    @friends = ko.observableArray(person.friends)

window.PersonViewModel = PersonViewModel

そして、フォームの下の実際のビューで、それが添付されています。

person_json = <%= (@person.to_json.html_safe) %>;

ko.applyBindings(new PersonViewModel(person_json));
于 2012-11-17T08:27:59.967 に答える