Knockout.js - 通过rails控制器设置初始值

时间:2012-05-02 06:57:17

标签: ruby-on-rails knockout.js

我有一个rails应用程序,我想通过rails设置我的任务对象的一些默认值,并让knockout.js使用observables的默认值。

当前发生的事情是rails控制器的默认值很快被knockout.js observable命令中的空格替换。

这是我的rails控制器

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"

我是否必须从控制器传递JSON而不是使用默认的“render:new”?

我可以使用rails默认设置吗?

1 个答案:

答案 0 :(得分:2)

如果我理解正确你正在渲染视图并且rails正在将值写入相关字段,那么将其绑定到DOM并删除字段,因为observable没有值。

  1. 在页面中以json
  2. 呈现模型的值
  3. 通过ajax进行往返获取值
  4. 在页面标记中渲染值并为模型提取这些值
  5. 选项1& 3对于服务器来说很容易,只需要一个页面请求。客户端#1很简单,因为将数据映射到模型和绑定,而#3需要代码从标记中提取(即,如果您将数据放在元素的data-*属性中),但可以提供更好的标记,但是更多的工作是提出一个方案,用于对考虑集合等的模型进行初始值绑定。

    选项2需要两次旅行,一次是获取html,另一次是获取json,除非你在html get上添加代码跳过db,否则你的请求也会增加一倍。 ICK。

    [编辑] 我还没有使用gon宝石,RailsCasts的这个截屏显示了这些技巧:http://railscasts.com/episodes/324-passing-data-to-javascript