Coffeescript和jQuery在特定视图上使用RubyonRails不起作用
我在RubyonRails(4.1.4)中遇到了javascript问题。它只有一个控制器,我不明白为什么——有人知道吗?多谢各位Coffeescript和jQuery在特定视图上使用RubyonRails不起作用,jquery,ruby-on-rails,ruby-on-rails-4,coffeescript,Jquery,Ruby On Rails,Ruby On Rails 4,Coffeescript,我在RubyonRails(4.1.4)中遇到了javascript问题。它只有一个控制器,我不明白为什么——有人知道吗?多谢各位 ####This works :) $(document).on "turbolinks:load", -> $('#redemption_amount').keyup updateWorth $('#redemption_amount').change updateWorth updateWorth = -> discount =
####This works :)
$(document).on "turbolinks:load", ->
$('#redemption_amount').keyup updateWorth
$('#redemption_amount').change updateWorth
updateWorth = ->
discount = ($('#discount').val() / 100)
worth = $(this).val() * discount
$('#redemption_worth').html(worth.toFixed(2))
#####
问题是:
####This does not work :(
$(document).on "turbolinks:load", ->
$('#purchase_amount').keyup updatePoints
$('#purchase_amount').change updatePoints
updatePoints = ->
points = (Math.round($(this).val() * 0.92))
$('#purchase_points').html(points)
####
缩进定义了CoffeeScript代码的结构,因此如果缩进关闭,那么代码也将关闭 在第一种情况下:
$(document).on "turbolinks:load", ->
$('#redemption_amount').keyup updateWorth
$('#redemption_amount').change updateWorth
updateWorth = ->
discount = ($('#discount').val() / 100)
worth = $(this).val() * discount
$('#redemption_worth').html(worth.toFixed(2))
JavaScript看起来像:
var updateWorth;
$(document).on("turbolinks:load", function() {
$('#redemption_amount').keyup(updateWorth);
$('#redemption_amount').change(updateWorth);
});
updateWorth = function() { ... };
因此,当调用keyup
和change
时,updateWorth
的值是一个函数,一切正常
在第二种情况下:
$(document).on "turbolinks:load", ->
$('#purchase_amount').keyup updatePoints
$('#purchase_amount').change updatePoints
updatePoints = ->
points = (Math.round($(this).val() * 0.92))
$('#purchase_points').html(points)
JavaScript的最终结果如下:
$(document).on("turbolinks:load", function() {
var updatePoints;
$('#purchase_amount').keyup(updatePoints);
$('#purchase_amount').change(updatePoints);
updatePoints = function() { ... };
});
缩进将updatePoints
放入回调中。调用keyup
和change
时,updatePoints
的值为undefined
,因为尚未到达updatePoints=function(){…}
部分
经验法则:
updateWorth = ->
discount = $('#discount').val() / 100
worth = $(@).val() * discount
$('#redemption_worth').html(worth.toFixed(2))
$(document).on "turbolinks:load", ->
$('#redemption_amount').keyup updateWorth
$('#redemption_amount').change updateWorth
以及:
updatePoints = ->
points = (Math.round($(@).val() * 0.92))
$('#purchase_points').html(points)
$(document).on "turbolinks:load", ->
$('#purchase_amount').keyup updatePoints
$('#purchase_amount').change updatePoints