0

这可能是一个简单的问题:我可以使用 rails 实例对象填充我的淘汰视图模型吗?例如,我在 mysite.com/person/1 上有一个编辑页面。控制器找到那个人,视图可以使用@person 来呈现它的数据。

我可以使用@person 来填充我的视图模型吗?喜欢:

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

1 回答 1

4

是的,但是您必须使用 erb 输出变量,例如

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

但是,通常,您不想将特定变量传递给特定的可观察对象,您希望将资源本身传递给视图模型的新立场,然后从中设置视图模型变量,我将使用更好的示例进行更新当我使用电脑时,但基本上:

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,作为每个视图模型的一个类,这里​​是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 回答