这可能是一个简单的问题:我可以使用 rails 实例对象填充我的淘汰视图模型吗?例如,我在 mysite.com/person/1 上有一个编辑页面。控制器找到那个人,视图可以使用@person 来呈现它的数据。
我可以使用@person 来填充我的视图模型吗?喜欢:
self.name = ko.observable(@person.name);
这可能是一个简单的问题:我可以使用 rails 实例对象填充我的淘汰视图模型吗?例如,我在 mysite.com/person/1 上有一个编辑页面。控制器找到那个人,视图可以使用@person 来呈现它的数据。
我可以使用@person 来填充我的视图模型吗?喜欢:
self.name = ko.observable(@person.name);
是的,但是您必须使用 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));