1

我有一个使用日期选择器的注册模型和表单。我希望用户只能选择与事件相对应的日期(另一个模型)。

我的问题是我找不到将事件数组传递给 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 数组在控制台中似乎是空的......

任何帮助将不胜感激

4

1 回答 1

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;

于 2012-12-31T11:35:33.463 回答