Автоматическая перезагрузка с задержкой при нажатии - PullRequest
0 голосов
/ 15 февраля 2020

У меня есть система онлайн-магазина (например, аукцион). В этой системе мне бы хотелось, чтобы после нажатия пользователем кнопки для отправки заказа на покупку или продажу страница автоматически регулировалась через несколько секунд. Код, который отправляет эти заказы, выглядит следующим образом:

@PlaceOrderUI = flight.component ->
  @attributes
    formSel: 'form'
    successSel: '.status-success'
    infoSel: '.status-info'
    feeSel: '.status-fee'
    dangerSel: '.status-danger'
    priceAlertSel: '.hint-price-disadvantage'
    positionsLabelSel: '.hint-positions'
    feeLabelSel: '.hint-fee'
    feeLabelInfo: '.fee-info'
    feeLabelDiscountInfo: '.fee-discount-info'

    priceSel: 'input[id$=price]'
    volumeSel: 'input[id$=volume]'
    totalSel: 'input[id$=total]'
    bidSel: "input[id='calculate_bid']"
    askSel: "input[id='calculate_ask']"

    currentBalanceSel: 'span.current-balance'
    submitButton: ':submit'

  @panelType = ->
    switch @$node.attr('id')
      when 'bid_entry' then 'bid'
      when 'ask_entry' then 'ask'

  @cleanMsg = ->
    @select('successSel').text('')
    @select('infoSel').text('')
    @select('dangerSel').text('')
    @select('feeSel').text('')

  @resetForm = (event) ->
    @trigger 'place_order::reset::price'
    @trigger 'place_order::reset::volume'
    @trigger 'place_order::reset::total'
    @priceAlertHide()

  @disableSubmit = ->
    @select('submitButton').addClass('disabled').attr('disabled', 'disabled')

  @enableSubmit = ->
    @select('submitButton').removeClass('disabled').removeAttr('disabled')

  @confirmDialogMsg = ->
    confirmType = @select('submitButton').text()
    price = @select('priceSel').val()
    volume = @select('volumeSel').val()
    sum = @select('totalSel').val()
    """
    #{gon.i18n.place_order.confirm_submit} "#{confirmType}"?

    #{gon.i18n.place_order.price}: #{price}
    #{gon.i18n.place_order.volume}: #{volume}
    #{gon.i18n.place_order.sum}: #{sum}
    """

  @beforeSend = (event, jqXHR) ->
    if true #confirm(@confirmDialogMsg())
      @disableSubmit()
    else
      jqXHR.abort()

  @handleSuccess = (event, data) ->
    @cleanMsg()
    @select('successSel').append(JST["templates/hint_order_success"]({msg: data.message})).show()
    @resetForm(event)
    window.sfx_success()
    @enableSubmit()

  @handleError = (event, data) ->
    @cleanMsg()
    ef_class = 'shake shake-constant hover-stop'
    json = JSON.parse(data.responseText)
    console.log(json)
    @select('dangerSel').append(JST["templates/hint_order_warning"]({msg: json.message})).show()
      .addClass(ef_class).wait(500).removeClass(ef_class)
    window.sfx_warning()
    @enableSubmit()

  @getBalance = ->
    BigNumber( @select('currentBalanceSel').data('balance') )

  @getLastPrice = ->
    BigNumber(gon.ticker.last)

  @allIn = (event)->
    switch @panelType()
      when 'ask'
        @trigger 'place_order::input::volume', {volume: @getBalance()}
      when 'bid'
        @trigger 'place_order::input::total', {total: @getBalance()}

  @refreshBalance = (event, data) ->
    type = @panelType()
    currency = gon.market[type].currency
    balance = gon.accounts[currency]?.balance || 0

#    console.log "refreshBalance: ", type, balance, event, data

    @select('currentBalanceSel').data('balance', balance)
    @select('currentBalanceSel').text(formatter.fix(type, balance))

    @trigger "place_order::balance::change", balance: BigNumber(balance)
    @trigger "place_order::max::#{@usedInput}", max: BigNumber(balance)
    @trigger "place_order::balance::change::#{type}", balance: BigNumber(balance)

  @roundValueToText = (v, precision) ->
    v.round(precision, BigNumber.ROUND_DOWN).toF(precision)

  @updateOrder = (event, data) ->
#    console.log "updateOrder: ", event, data

    @select('priceSel').val BigNumber(data.price).round(gon.market.bid.fixed, BigNumber.ROUND_DOWN).toF(gon.market.bid.fixed)
    @select('volumeSel').val BigNumber(data.volume).round(gon.market.ask.fixed, BigNumber.ROUND_DOWN).toF(gon.market.ask.fixed)
    @select('totalSel').val BigNumber(data.total).round(gon.market.bid.fixed, BigNumber.ROUND_DOWN).toF(gon.market.bid.fixed)

    @updateAvailable(event, data)

  @updateAvailable = (event, order) ->
#    console.log "updateAvailable: ", event, order

    @current_order = order

    type = @panelType()
    node = @select('currentBalanceSel')

    order[@usedInput] = 0 unless order[@usedInput]
    available = formatter.fix type, @getBalance().minus(order[@usedInput])

    fee = 0.0
    fee_actual_percent = 0.0

    if type == 'ask'
      fee = gon.market.ask.fee
    else
      fee = gon.market.bid.fee

    spero_discount_flag = -1

    spero_account = gon.accounts['spero']
    if spero_account.hasOwnProperty('spero_discount')
      if spero_account.spero_discount == true
        spero_discount_flag = 1
      if spero_account.spero_discount == false
        spero_discount_flag = 0

    fee_actual_percent = fee
    if spero_discount_flag == 1
      fee_actual_percent = fee / 2.0

    if order.hasOwnProperty('total')
      order.fee = order.total * fee
    else
      order.fee = order[@usedInput] * fee

    order.fee_percent = fee * 100.0
    order.fee_actual_percent = fee_actual_percent * 100.0
    order.spero_discount_flag = spero_discount_flag

    if @select('priceSel').val() != 0.0 && @select('priceSel').val() != ''
      @select('feeLabelSel').hide().text(formatter.fixPriceGroup(order.fee)).fadeIn()
      @select('feeLabelInfo').hide().text(formatter.round(order.fee_actual_percent, 2) + "%").fadeIn()
    else
      @select('feeLabelSel').fadeOut().text('')
      @select('feeLabelInfo').fadeOut().text('')

    if order.spero_discount_flag == 1
      @select('feeLabelDiscountInfo').fadeOut().text('')
    else
      @select('feeLabelDiscountInfo').hide().text('how to get 50% market fee discount').fadeIn()

    if BigNumber(available).lessThan(0.000000001)
      @select('positionsLabelSel').hide().text(gon.i18n.place_order["full_#{type}"]).fadeIn()
    else
      @select('positionsLabelSel').fadeOut().text('')

    node.text(available)

  @priceAlertHide = (event) ->
    @select('priceAlertSel').fadeOut ->
      $(@).text('')

  @priceAlertShow = (event, data) ->
    @select('priceAlertSel')
      .hide().text(gon.i18n.place_order[data.label]).fadeIn()

  @clear = (e) ->

    if e.currentTarget.checked
      @disableSubmit()
      @refreshBalance(null, null)
      @trigger "place_order::max::#{@usedInput}", max: BigNumber("1000000000000.0")
      @trigger "place_order::balance::change::#{@panelType()}", balance: BigNumber("1000000000000.0")
    else
      @enableSubmit()
      @refreshBalance(null, null)

    @resetForm(e)
    @select('feeLabelSel').fadeOut().text('')
    @select('feeLabelInfo').fadeOut().text('')
    @trigger 'place_order::focus::price'

  @calculatorClick = (e) ->
#    console.log @panelType(), e

    @clear(e)

  @after 'initialize', ->
    type = @panelType()

    if type == 'ask'
      @usedInput = 'volume'
    else
      @usedInput = 'total'

    @current_order = null

    PlaceOrderData.attachTo @$node
    OrderPriceUI.attachTo   @select('priceSel'),  form: @$node, type: type
    OrderVolumeUI.attachTo  @select('volumeSel'), form: @$node, type: type
    OrderTotalUI.attachTo   @select('totalSel'),  form: @$node, type: type

    @on 'place_order::price_alert::hide', @priceAlertHide
    @on 'place_order::price_alert::show', @priceAlertShow
    @on 'place_order::order::updated', @updateAvailable
    @on 'place_order::clear', @clear
    @on 'place_order::order::total', @updateOrder

    @on document, 'account::update', @refreshBalance

    @on @select('formSel'), 'ajax:beforeSend', @beforeSend
    @on @select('formSel'), 'ajax:success', @handleSuccess
    @on @select('formSel'), 'ajax:error', @handleError

    @on @select('currentBalanceSel'), 'click', @allIn

    if @panelType() == 'bid'
      @on @select('bidSel'), 'click', @calculatorClick
    else
      @on @select('askSel'), 'click', @calculatorClick

Самая важная часть, которая должна ввести этот код, будет в этом отрывке:

  @handleSuccess = (event, data) ->
    @cleanMsg()
    @select('successSel').append(JST["templates/hint_order_success"]({msg: data.message})).show()
    @resetForm(event)
    window.sfx_success()
    @enableSubmit()

Я уже протестировал далее, согласно некоторым ответам, найденным здесь:

  @handleSuccess = (event, data) ->
    @cleanMsg()
    @select('successSel').append(JST["templates/hint_order_success"]({msg: data.message})).show()
    @resetForm(event)
    window.sfx_success()
    @enableSubmit()
    setTimeout(window.location.reload(1), 3000)

Однако страница перезагружается, как только я нажимаю кнопку, интервал отсутствует (в этом примере 3 секунды)

1 Ответ

0 голосов
/ 15 февраля 2020

Мне удалось решить это со следующим изменением:

setTimeout(window.location.reload(1), 3000)

Где я преобразовал в:

setTimeout (->
  window.location.reload 1
  return
), 3000

Затем фрагмент кода стал:

  @handleSuccess = (event, data) ->
    @cleanMsg()
    @select('successSel').append(JST["templates/hint_order_success"]({msg: data.message})).show()
    @resetForm(event)
    window.sfx_success()
    @enableSubmit()
    setTimeout (->
      window.location.reload 1
      return
    ), 3000
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...