如何在 Rails 上使用 Ruby 创建动态 javascript?

How to create dynamic javascript with Ruby On Rails?

我正在 jQuery FullCalendar 和 Ruby 在 Rails 上进行试验, 我有一个名为 Player 的模型。我想在索引模板上为每个玩家呈现一个日历。

$('#player1_calendar').fullCalendar({
        // put your options and callbacks here
})

在视图上呈现日历

我怎样才能动态地为每个玩家添加一个日历,这样我就可以调用渲染它:

<div id="player1_calendar"></div>
<div id="player2_calendar"></div>
<div id="player3_calendar"></div>
...

也许在 Javascript 中完全做到这一点更容易:

向所有日历元素添加 class:

<div id="player1_calendar" class="player-calendar"></div>

然后遍历所有这些并附上您的完整日历:

$('.player-calendar').each(function(idx, calendar) {
    $(calendar).fullCalendar({});
});

我会采用不同的方法。

事实是,Rails 能够很好地返回 JSON 中的数据,这是 JavaScript 的本机数据格式。也就是说,您可以编写静态 JS 并向其添加动态 JSON 数据端点。

一般算法如下:

  • 添加一个 JSON 端点,它提供在每种特定情况下决定选项所需的所有数据:这可能是一个返回给定页面上所有玩家数据的端点
  • 在 HTML 中用一些东西突出显示集合的根标签:对于与行为相关的选项,我使用 data-attributes;您甚至可以为属性值中的端点提供 URL:重点是,您应该能够设计一个选择器来找到这些
  • 编写静态JavaScript,通过上面设计的选择器找到所有的标签,查询所需的数据,然后使用接收到的数据以正确的选项调用fullCalendar

这是消除对动态 JavaScript 需求的通用方法。对于单一位置的解决方案,这显然有点矫枉过正,但对于频繁使用来说,这更方便,因为它允许您应用您的行为,而无需生成纯 JS 或什至将 JS 插入页面,但仅由 DOM.