1

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

当前发生的情况是 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"

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

我可以使用rails默认值吗?

4

1 回答 1

2

如果我理解正确,您正在渲染视图,并且 rails 正在将值写入相关字段,然后将其敲除绑定到 DOM 并清空字段,因为 observable它没有任何值。

  1. 将页面中模型的值呈现为 json
  2. 通过ajax进行往返以获取值
  3. 呈现页面标记中的值并为您的模型提取这些值

选项 1 和 3 对服务器来说很容易,并且只需要对页面的一个请求。客户端 #1 很简单,将数据映射到模型并绑定,而 #3 需要从标记中提取代码(即,如果您将数据data-*放在元素的属性中)但可以制作更好的标记,但是它更多的工作是想出一个计划,将价值与考虑收藏等的模型进行初始绑定。

选项 2 需要两次,一次获取 html,另一次获取 json,除非您添加代码以跳过 html 获取上的 db,否则您对 db 的请求也会加倍。伊克。

[编辑] 还有gon一个我没有使用过的 gem 和 RailsCasts 的截屏视频,展示了这些技术的实际应用:http ://railscasts.com/episodes/324-passing-data-to-javascript

于 2012-05-02T20:02:33.883 回答