如何将这两个 CoffeeScript 片段组合成一个有效的文件?
How do I combine these two snippets of CoffeeScript into 1 file that works?
所以我有两个独立工作的片段:
$ ->
$('[data-provider="summernote"]').each ->
$(this).summernote
height: 300
还有这个:
$ ->
companySelect = $('#company-select')
jobFields = $('#job-fields')
companySelect.change ->
# if selected option is the first option
if $(this).find('option:selected').index() == 1
jobFields.show().find(':input').prop 'disabled', false
else
jobFields.hide().find(':input').prop 'disabled', true
return
# call change immediately so this still works when already updating and not just creating.
companySelect.change()
return
鉴于这两个片段管理 Jobs#Views
中的两件事,我想将它们合并到我的 jobs.coffee
文件中。
但我不太确定如何将它们放在同一个文件中,这样它们就可以在不相互干扰的情况下工作。
我尝试了一些东西,但由于我并不真正完全理解 CoffeeScript,所以我确定我做错了,所以没有用。
编辑 1
鉴于@Uzbekjon 给出的 以及他对这个问题的回答,这就是我的合并文件现在的样子:
ready = ->
$('data-provider="summernote"]').each ->
$(this).summernote(height: 300)
$(document).ready(ready)
$(document).on('turbolinks:load', ready)
companySelect = $('#company-select')
jobFields = $('#job-fields')
companySelect.change ->
# if selected option is the first option
if $(this).find('option:selected').index() == 1
jobFields.show().find(':input').prop 'disabled', false
else
jobFields.hide().find(':input').prop 'disabled', true
return
# call change immediately so this still works when already updating and not just creating.
companySelect.change()
我现在收到这个错误:
ExecJS::RuntimeError at /jobs/new
SyntaxError: [stdin]:10:1: unexpected indentation
确保将文件命名为 jobs.js.coffee
(不要伪造 js
)。此外,spacing/tabs 很重要,因此请确保您没有 indent/unindent 代码的一部分。
$ ->
$('[data-provider="summernote"]').each ->
$(this).summernote
height: 300
companySelect = $('#company-select')
jobFields = $('#job-fields')
companySelect.change ->
# if selected option is the first option
if $(this).find('option:selected').index() == 1
jobFields.show().find(':input').prop 'disabled', false
else
jobFields.hide().find(':input').prop 'disabled', true
return
# call change immediately so this still works when already updating and not just creating.
companySelect.change()
编辑 1:
根据您的编辑和评论。您在第 10 行和第 11 行有无意的缩进。
jobFields = $('#job-fields')
companySelect.change ->
此外,您可能希望在 ready
回调中有这样的行为:
ready = ->
# Setup "summernote" editor
$('data-provider="summernote"]').each ->
$(this).summernote(height: 300)
# Company selector
companySelect = $('#company-select')
jobFields = $('#job-fields')
companySelect.change ->
# if selected option is the first option
if $(this).find('option:selected').index() == 1
jobFields.show().find(':input').prop 'disabled', false
else
jobFields.hide().find(':input').prop 'disabled', true
return
# call change immediately so this still works when already updating and not just creating.
companySelect.change()
$(document).ready(ready)
$(document).on('turbolinks:load', ready)
所以我有两个独立工作的片段:
$ ->
$('[data-provider="summernote"]').each ->
$(this).summernote
height: 300
还有这个:
$ ->
companySelect = $('#company-select')
jobFields = $('#job-fields')
companySelect.change ->
# if selected option is the first option
if $(this).find('option:selected').index() == 1
jobFields.show().find(':input').prop 'disabled', false
else
jobFields.hide().find(':input').prop 'disabled', true
return
# call change immediately so this still works when already updating and not just creating.
companySelect.change()
return
鉴于这两个片段管理 Jobs#Views
中的两件事,我想将它们合并到我的 jobs.coffee
文件中。
但我不太确定如何将它们放在同一个文件中,这样它们就可以在不相互干扰的情况下工作。
我尝试了一些东西,但由于我并不真正完全理解 CoffeeScript,所以我确定我做错了,所以没有用。
编辑 1
鉴于@Uzbekjon 给出的
ready = ->
$('data-provider="summernote"]').each ->
$(this).summernote(height: 300)
$(document).ready(ready)
$(document).on('turbolinks:load', ready)
companySelect = $('#company-select')
jobFields = $('#job-fields')
companySelect.change ->
# if selected option is the first option
if $(this).find('option:selected').index() == 1
jobFields.show().find(':input').prop 'disabled', false
else
jobFields.hide().find(':input').prop 'disabled', true
return
# call change immediately so this still works when already updating and not just creating.
companySelect.change()
我现在收到这个错误:
ExecJS::RuntimeError at /jobs/new
SyntaxError: [stdin]:10:1: unexpected indentation
确保将文件命名为 jobs.js.coffee
(不要伪造 js
)。此外,spacing/tabs 很重要,因此请确保您没有 indent/unindent 代码的一部分。
$ ->
$('[data-provider="summernote"]').each ->
$(this).summernote
height: 300
companySelect = $('#company-select')
jobFields = $('#job-fields')
companySelect.change ->
# if selected option is the first option
if $(this).find('option:selected').index() == 1
jobFields.show().find(':input').prop 'disabled', false
else
jobFields.hide().find(':input').prop 'disabled', true
return
# call change immediately so this still works when already updating and not just creating.
companySelect.change()
编辑 1:
根据您的编辑和评论。您在第 10 行和第 11 行有无意的缩进。
jobFields = $('#job-fields')
companySelect.change ->
此外,您可能希望在 ready
回调中有这样的行为:
ready = ->
# Setup "summernote" editor
$('data-provider="summernote"]').each ->
$(this).summernote(height: 300)
# Company selector
companySelect = $('#company-select')
jobFields = $('#job-fields')
companySelect.change ->
# if selected option is the first option
if $(this).find('option:selected').index() == 1
jobFields.show().find(':input').prop 'disabled', false
else
jobFields.hide().find(':input').prop 'disabled', true
return
# call change immediately so this still works when already updating and not just creating.
companySelect.change()
$(document).ready(ready)
$(document).on('turbolinks:load', ready)