【问题标题】:Automatically update value with coffeescript使用咖啡脚本自动更新值
【发布时间】:2021-05-03 14:49:20
【问题描述】:

我是使用 JS 的新手,所以我在这里遇到问题 rsrs

我需要在用户开始在金额字段上插入值时自动更新结果字段

$(document).ready ->
$('form').submit ->
if $('form').attr('action') == '/convert'
  $.ajax '/convert',
      type: 'GET'
      dataType: 'json'
      data: {
              source_currency: $("#source_currency").val(),
              target_currency: $("#target_currency").val(),
              amount: $("#amount").val()
            }
      error: (jqXHR, textStatus, errorThrown) ->
        alert textStatus
      success: (data, text, jqXHR) ->
        $('#result').val(data.value)
    return false;

现在我有一个调用 /convert 的提交按钮 但是我怎样才能删除它并在我收到值时才调用 API,无论是否完整

   class ExchangeService
  def initialize(source_currency, target_currency, amount)
    @source_currency = source_currency
    @target_currency = target_currency
    @amount = amount.to_f
  end


def call
    value = get_exchange
    value * @amount
  rescue RestClient::ExceptionWithResponse => e
    e.response
  end

def get_exchange
  exchange_api_url = Rails.application.credentials[Rails.env.to_sym][:currency_api_url]
  exchange_api_key = Rails.application.credentials[Rails.env.to_sym][:currency_api_key]
  url = "#{exchange_api_url}?token=#{exchange_api_key}&currency=#{@source_currency}/#{@target_currency}"
  result = RestClient.get url
  JSON.parse(result.body)['currency'][0]['value'].to_f
end
end

【问题讨论】:

  • 您可以在表单中使用 remote: true 并跳过 AJAX 代码,然后使用 .js.erb 之类的视图来附加您的数据。
  • 对不起,我没听懂,你能举个例子吗?
  • 是的,我会在底部回答
  • 您可以从您的输入元素中监听inputchange 事件并使用它来触发AJAX 请求。 $('#my-input').on 'input', -> 而不是 $('form').submit ->

标签: javascript ruby-on-rails ruby ajax coffeescript


【解决方案1】:

您可以使用 Rails 中的remote: true 发出 AJAX 请求:

一个带有汽车资源的简单示例:

cars_controller.rb

def create
  @car = Car.new(car_params)

  respond_to do |format|
    if @car.save
      format.js
    else
      format.js
    end
  end
end

_form.html.erb

<%= form_with(model: car, local: false) do |form| %>
  <% if car.errors.any? %>
    <div id="error_explanation">
      <h2><%= pluralize(car.errors.count, "error") %> prohibited this car from being saved:</h2>

      <ul>
        <% car.errors.each do |error| %>
          <li><%= error.full_message %></li>
        <% end %>
      </ul>
    </div>
  <% end %>

  <div class="field">
    <%= form.label :name %>
    <%= form.text_field :name %>
  </div>

  <div class="actions">
    <%= form.submit %>
  </div>
<% end %>

create.js.erb

console.log('<%= @car.name  %>');

所以,当你提交 Rails 表单时,请求会像 JS 一样。您的控制器需要接受此格式(format.js),当控制器处理数据时,流程继续执行操作,但在此文件中使用 js 扩展名(create.js.erb),您可以制作您想要的内容,附加数据,替换数据,改变值,可以使用Ruby + JS 希望对你有帮助,请原谅我的英语不好

【讨论】:

    猜你喜欢
    • 2013-02-04
    • 2012-07-23
    • 2012-12-04
    • 1970-01-01
    • 2016-06-27
    • 2013-01-09
    • 1970-01-01
    • 1970-01-01
    • 2023-03-24
    相关资源
    最近更新 更多