Как реорганизовать работающий кусок кода, написанный на jQuery / Coffeescript для повторного использования - PullRequest
0 голосов
/ 04 декабря 2011

У меня работает следующий код:

  $ ->
    $("[id$=\"_phase_id\"]").change(->
      common_prefix = "type_well_type_well_phases_attributes_"
      cell_pos = $(this).attr("id").match(/\d+/g)
      mult = "#" + common_prefix + cell_pos + "_multiplier"
      mol  = $("#" + common_prefix + cell_pos + "_mol_percent").val()
      gpm  = "#" + common_prefix + cell_pos + "_GPM"
      component_id = $(this).val()
      $.getJSON('/phases/' + component_id, (data) ->
        pressure_base = 0.0
        if $("#type_well_pressure_base").val() == "14.65"
          pressure_base = data.base1
        else if $("#type_well_pressure_base").val() == "14.696"
          pressure_base = data.base2
        else if $("#type_well_pressure_base").val() == "14.73"
          pressure_base = data.base3
        else if $("#type_well_pressure_base").val() == "15.025"
          pressure_base = data.base4
        mult_value = parseFloat(pressure_base)
        $(mult).val mult_value
        $(gpm).val bcr_round_to(mult_value * (mol / 100.0), 4) if (mol != "")
      )
    ).trigger "change"

Это прохождение через вложенную форму (phase_attributes) в моем коде Rails для вызова json на основе значения (раскрывающегося списка presure_base), выбранного в моей родительской форме (type_well), а затем вычисление значения (gpm) для вложенной формы , Как вы можете видеть, если фаза «изменена» в раскрывающемся списке фаз, я выбираю соответствующую строку из базы данных и на основе значения pressure_base (14.65, 14.696, 14.73, 15.025) вычисляю значение «gpm» , Все работает.

Теперь я пытаюсь использовать функциональность для автоматического пересчета значений «gpm» вложенной формы, когда пользователь изменяет саму «нажимную базу». Ясно, что я должен пройтись по вложенным строкам (я знаю, как это сделать, чтобы не было проблем), и в основном повторяю процесс снова для каждой вложенной строки. Единственная переменная здесь - это cell_pos. Есть ли способ, которым я могу извлечь подчиненную функцию jQuery / Coffeescript, которая вызывается из моего цикла неоднократно? Я знаю, как это сделать в Ruby / Rails, так как мне это удобно, но у меня меньше опыта с jQuery (еще меньше с Coffeescript).

1 Ответ

0 голосов
/ 05 декабря 2011

Если я вас правильно понял, вы должны использовать событие change для #type_well_pressure_base, чтобы пересчитать значение gpm. Затем вы можете использовать обратный вызов getJSON просто для изменения сохраненных значений и запуска вычисления.

phase = $('[id$="_phase_id"]')
phase.change ->
    self = $(this)
    common_prefix = "type_well_type_well_phases_attributes_"

    cell_pos = self.attr('id').match(/\d+/g)
    component_id = self.val()

    cell = "##{common_prefix}#{cell_pos}"
    mult = "#{cell}_multiplier"
    gpm  = "#{cell}_GPM"

    mol  = $("#{cell}_mol_percent").val()

    $.getJSON("/phases/#{component_id}", (data) ->
        pressure.base.data 'pb_data', data
        pressure_base.trigger 'change'

base_values =
    '14.65'  : 'base1'
    '14.696' : 'base2'
    '14.73'  : 'base3'
    '15.025' : 'base4'

pressure_base = $('#type_well_pressure_base')
pressure_base.change ->
    data = $(this).data 'pb_data'
    type_well_pb = pressure_base.val()
    base = base_values[type_well_pb]
    mult_value = parseFloat(data[base])
    $(mult).val mult_value
    $(gpm).val bcr_round_to(mult_value * (mol / 100.0), 4) if (mol != "")

phase.trigger 'change'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...