1

我有一個使用日期選擇器的註冊模型和表單。我希望用戶只能選擇與事件對應的日期(另一種模式)。rails 3 jQuery UI Datepicker只想啓用特定的日期

我的問題是我找不到將事件數組傳遞給javascript的正確方法。

這是控制器:

@available_dates = Event.pluck(:start_time).as_json 

這是視圖:

<script> 
     var availableDates = [<%= @available_dates.to_s.html_safe %>] ; 
    </script> 

,這是JS:

function available(date) { 
    ymd = date.getFullYear() + "-" + ('0' + (date.getMonth()+1)).slice(-2) + "-" + ('0' + date.getDate()).slice(-2); 
    console.log(ymd+' : '+($.inArray(ymd, availableDates))); 
    if ($.inArray(ymd, availableDates) != -1) { 
     return [true, "","Available"]; 
    } else { 
     return [false,"","unAvailable"]; 
    } 
} 
$("#registration_date").datepicker({ beforeShowDay: available, dateFormat: "yy-mm-dd"}); 

我覺得我做的事情在視圖錯誤,因爲js陣列似乎是空的看着控制檯...

任何幫助,將不勝感激

+0

這可能沒有實質意義,但是您是否檢查了控制器中'@ available_dates'的值? –

+0

'@ available_dates'返回'=> [「2013-01-05」,「2013-02-02」,「2013-03-02」]'(這是正確的日期)和'@ available_dates.to_s'返回'=>「[\」2013-01-05 \「,\」2013-02-02 \「,\」2013-03-02 \「]」' – defuzed

回答

0

在評論你提到@available_dates.to_s回報"[\"2013-01-05\", \"2013-02-02\", \"2013-03-02\"]"的問題。這本身會在頁面上呈現數組,因此不需要再「裝箱」。

嘗試改變下面一行:

var availableDates = [<%= @available_dates.to_s.html_safe %>] ; 

這樣:

var availableDates = <%= @available_dates.to_s.html_safe %>; 

希望它能幫助。

如果不是,您要麼在您的代碼中進一步清除@available_dates的值,要麼@available_dates在您的視圖的上下文中不可用。嘗試使用debugger;來嘗試單步執行代碼?

+0

我想這就是爲什麼我的數組是空的,刪除括號給我以下錯誤'未捕獲的SyntaxError:意外的令牌;'我能否在html.erb的腳本標記中使用<%= %>或其他東西? – defuzed

+0

@defuzed您要麼在您的代碼中進一步清除「@ available_dates」的值,要麼'@ available_dates'在您的視圖的上下文中不可用。使用'debugger;'嘗試單步執行代碼? –

+0

非常感謝你讓我走上正軌,我在代碼中進一步清除了@available_dates ......非常感謝! – defuzed

相關問題