麻烦将咖啡脚本片段移动到rails中自己的类中

时间:2016-05-10 18:00:27

标签: javascript ruby-on-rails coffeescript

我被赋予了将这些咖啡脚本代码移到类

中的任务
format = (icon) ->
  originalOption = icon.element
  '<i class="fa ' + $(originalOption).data('icon') + '"></i> ' + icon.text

$(document).ready ->
  $('.select2-fountawesome-icon').select2
    width: '100%'
    formatResult: format

它是一个rails应用程序,正在application.js.coffee中工作。

这是我目前在scenario-page.js.coffee

中所拥有的内容
class @ScenarioPage
  constructor: ->
    @format()
    @enabledSelect2()

  format: (icon) ->
    originalOption = icon.element
    '<i class="fa ' + $(originalOption).data('icon') + '"></i> ' + icon.text

  enabledSelect2: () ->
    $('.select2-fountawesome-icon').select2
      width: '100%'
      formatResult: format

我创建了一个带有构造函数的类,用于初始化实例方法/属性。我放弃了document.ready因为咖啡脚本无论如何加载了它。应该正确定义类中的函数。我用try coffeescript转换为js,看起来是正确的。我不确定我的新课程有什么问题?第一个片段确实有用。

1 个答案:

答案 0 :(得分:0)

我在您的代码中看到两个错误:

class @ScenarioPage #<---- @ shouldn't be here
  constructor: ->
    @format() #<---- the icon param is missing, which will cause an error below
    @enabledSelect2()

  format: (icon) ->
    originalOption = icon.element
    '<i class="fa ' + $(originalOption).data('icon') + '"></i> ' + icon.text

  enabledSelect2: () ->
    $('.select2-fountawesome-icon').select2
      width: '100%'
      formatResult: format

如果我可以添加一些我将如何做的事情:

class ScenarioPage
  constructor: ->

  format: (icon) ->
    originalOption = icon.element
    '<i class="fa ' + $(originalOption).data('icon') + '"></i> ' + icon.text

  enabledSelect2: () ->
    $('.select2-fountawesome-icon').select2
      width: '100%'
      formatResult: format

$(document).ready ->
  scenario = new ScenarioPage()
  scenario.enabledSelect2()

现在您只需要在需要时调用格式化功能。 如果你有什么不清楚的地方,请不要犹豫。

此致