2012-05-02 60 views
1

我有一個導軌應用程序,我想通過導軌設置我的任務對象的一些默認值,並讓knockout.js使用observables的默認值。Knockout.js - 通過導軌控制器設置初始值

當前發生的情況是rails控制器的默認值很快就會被knockout.js observable命令的空白替換。

這裏是我的軌控制器

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而不是使用默認的「渲染:新」?

我可以使用rails默認值嗎?

回答

2

如果我理解正確,您正在渲染視圖,並且rails將值寫入問題字段,然後將其綁定到DOM並清空字段,因爲observable沒有任何價值。

  1. 渲染模型的數值在頁面JSON
  2. 使通過AJAX往返於獲取值
  3. 呈現在頁面標記值和模型
提取這些值

選項1 & 3對於服務器來說很簡單,只需要一個頁面請求。客戶端#1很簡單,因爲將數據映射到您的模型並進行綁定,而#3需要從標記中提取代碼(即,如果您將數據放入元素的data-*屬性中),但可以實現更好的標記,但其更多的工作,以提出一個計劃,做你的初始價值模型考慮集合等

選項2需要兩次旅行,一個獲取html和另一個獲取json,你的請求加倍到db除非你添加代碼來跳過html獲取的分貝。伊克。

[編輯] 也有gon的寶石,我沒有使用過,並從RailsCasts這個截屏顯示在操作這些技術:http://railscasts.com/episodes/324-passing-data-to-javascript

+0

對於選項1你的意思是我的日期創建第二個數據元素字段,如「data-initial」=> @ task.task_date,然後用$(「#task_task_date」)。data('initial')將它讀入我的observable中。更新了 – map7

+0

- 查看gon gem並查看RailsCast第324集 - 它顯示了這些技巧。他們不是特定於基因敲除的,而是展示如何將模型數據提供給客戶端,以供淘汰。 – craigb