【问题标题】:Rails4: Use Coffeescript/javascript variable in viewRails4:在视图中使用 Coffeescript/javascript 变量
【发布时间】:2015-09-10 01:06:36
【问题描述】:

我正在尝试从我的 Rails 4 视图代码中调用分类的 coffeescript/javascript 函数。它告诉我在页面加载时创建并在 document.ready 中使用的类变量不再存在。

咖啡脚本:

class App
  reload_calendar: ->
    source = new Array
    viewable_calendars = $('input:checkbox:checked.visable_calendars').map(->
      @value
    ).get().join(',')
    calendar_url = '/events.json'
    new_event_link = '#{new_event_path}'
    $('#calendar').fullCalendar
      dayClick: (date, allDay, jsEvent, view) ->
        document.location.href = new_event_link + '?start_date=' + date
        return
      header:
        left: 'prev,today,next'
        center: 'title'
        right: 'month,agendaWeek,agendaDay'
      selectable: true
      selectHelper: true
      editable: false
      ignoreTimezone: false
      select: @select
      eventClick: @eventClick
      eventDrop: @eventDropOrResize
      eventSources: [ {
        url: calendar_url
        data:
          custom_param1: 'something'
          custom_param2: 'somethingelse'
        error: ->
          alert 'there was an error while fetching events!'
          return
      } ]
      eventResize: @eventDropOrResize
      timeFormat: 'h:mmtt{ - h:mmtt} '
    return

app = new App
$(document).ready ->
  app.reload_calendar()
  $('#calendar-color').minicolors()

部分:

<ul>
<% @calendars.each do |c| %>
  <li>
    <span style="background-color: <%= c.color %>;">
      <%= check_box_tag 'show_calendar_'+c.id.to_s, value=c.id.to_s, checked=true, :onchange => "app.reload_calendar()", :class => "visible_calendars" %>
    </span>
    <%= c.name %>
    <%= link_to 'x', calendar_path(c), :confirm => "Are you sure you want to remove the calendar?", :method => :delete %></li>
<% end %>

这可以很好地加载日历(在咖啡脚本的末尾使用 app.reload_calendar),但在通过单击或取消单击复选框触发时失败并出现错误 Uncaught ReferenceError: app is not defined

【问题讨论】:

  • 你试试window.app = new App
  • 谢谢,成功了。 :)

标签: ruby-on-rails coffeescript


【解决方案1】:

只需对每个咖啡脚本类使用此模式

class MyClass
  ...

root = exports ? window
root.MyClass = MyClass

让您的课程公开herehere的其他一些方法

【讨论】:

    【解决方案2】:

    window.app = 新 App 工作,正如 Long Dương 在 cmets 中发布的那样。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-11-20
      • 2015-09-09
      • 1970-01-01
      • 1970-01-01
      • 2015-10-17
      • 1970-01-01
      • 2012-07-23
      相关资源
      最近更新 更多