Увеличение значения данных div и его повторная установка в coffescript

0

У меня есть код coffeescript:

 $(document).ready ->
    setInterval refresh_table, 1000

 refresh_table = ->
    $.ajax 
      url: "/ac_units/refresh_table"
      format: "js"
      type: "POST"
      data: { pointer:$('#pointer').data('pointer'), ideal:$('#ideal').val() ,      current:$('#current').val() }

Этот код работает.

Я хочу добавить функции к этому коду. 1) Я хотел бы увеличить указатель до его отправки на сервер выше 2) Я хотел бы установить обновленное значение указателя на данные div 3) Я бы хотел отправить обновленный указатель на сервер

Я попробовал следующий подход для выполнения вышеуказанных функций:

$(document).ready ->
  setInterval refresh_table, 1000

refresh_table = ->
  a = $("#pointer").data("pointer")
  $("#pointer").data "pointer", a++
  $.ajax
url: "/XXX/refresh_table"
format: "js"
type: "POST"
data: { pointer:$('#pointer').data('pointer'), abc:$('#abc').val() , efg:$('#efg').val() }

Но это не сработало. Приращение не происходит. Вот некоторые результаты с моей консоли:

 Processing by XXXController#refresh_table as */*
 Parameters: {"pointer"=>"0", "abc"=>"73", "efg"=>"79"}
 Received params = {"pointer"=>"0", "abc"=>"73", "efg"=>"79", "controller"=>"xxx", "action"=>"refresh_table"}
 ptr = 0


 Started POST "/XXX/refresh_table" for 127.0.0.1 at 2014-04-04 14:15:44 -0400
 Processing by XXXController#refresh_table as */*
 Parameters: {"pointer"=>"0", "abc"=>"73", "efg"=>"79"}
 Received params = {"pointer"=>"0", "abc"=>"73", "efg"=>"79", "controller"=>"xxx", "action"=>"refresh_table"}
 ptr = 0

Что я делаю не так? Почему переменная не увеличивается? Может ли кто-нибудь предложить?

благодаря


Пробовал этот код в ответ на ответ ниже:

 $(document).ready ->
    setInterval refresh_table, 1000

 refresh_table = ->
    a = $("#pointer").data("pointer")
    x = ++a
    $("#pointer").data "pointer", x
    $.ajax 
      url: "/ac_units/refresh_table"
      format: "js"
      type: "POST"
      data: { pointer:x, ideal:$('#ideal').val() , current:$('#current').val() }

Но значение указателя все равно всегда 0

  • 0
    Там нет причин, чтобы ввести x , я просто использовал это, чтобы продемонстрировать проблему ...
Теги:
coffeescript

1 ответ

0
Лучший ответ

Вы используете a++. Вам нужно либо ++a либо просто a + 1.

a++ оценивает значение a перед тем, как увеличиваться, так что вы устанавливаете как "новый" атрибут data.

Просто...

a = 1
x = a++
console.log(a) # 2
console.log(x) # 1

Это сохраняет значение a (которое равно 1), а затем увеличивает a на 2, а затем устанавливает x в сохраненное значение a, которое равно 1.

В принципе, ваш код гарантирует, что атрибут data никогда не изменится, потому что он всегда устанавливает pointer обратно на текущее значение a до его приращения:

a = $("#pointer").data("pointer")
$("#pointer").data "pointer", a++

Хотя этот код правильно увеличивает атрибут, установив его на значение a после того, как a увеличивается.

a = $("#pointer").data("pointer")
$("#pointer").data "pointer", ++a
  • 0
    Привет, спасибо за ваш ответ. Я обновил свой пост после того, как попробовал ваше предложение. Но мой указатель по-прежнему всегда 0. Это должно быть какая-то другая проблема, похоже.
  • 0
    Нет, это действительно не так. Вы либо не предоставляете нам все данные, либо неправильно внедряете это решение; код, который вы нам дали, гарантированно страдает от проблемы, которую я изложил здесь. Это легко доказать себе: отбросьте консоль javascript и запустите a = 1; alert(a++) и вы увидите 1 . Теперь попробуйте a = 1; alert(++a) и вы увидите 2 . Это довольно просто.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню