Как получить переменные $ .ajax () с помощью coffescript внутри класса? (Rails 3.1) - PullRequest
0 голосов
/ 19 ноября 2011

Это мой первый вопрос, хотя я частый гость. Я пытался самостоятельно найти ответы на этот вопрос, но без радости.

Итак, у меня есть класс в coffescript (Rails 3.1), подобный этому:

root = global ? window

class root.CTimelineGraph
  constructor: (div, @w, @nw, @table_name) ->
    @columnNames = ""
    @dbReadTable(@table_name)
    ..

dbReadTable: (table_name) ->
    if table_name == "SOMETABLE" then @dbReadTableA1()

dbReadTableA1: ->
    sipa = ""
    $.ajax
      async: false
      type: "GET"
      url: "ajax/getcolumnnames"
      dataType: 'json'
      success: (data) ->
        sipa = data
    @columnNames = sipa

Мой вопрос: как я могу заполнить @columnNames (объявленный в конструкторе) данными, которые я получаю от контроллера ajax/getcolumnnames? Я использую третью переменную sipa, чтобы получить данные из функции успеха. Я делаю это неправильно?

Код, который я разместил, работает. Я задаю вопрос, потому что намереваюсь иметь много экземпляров этого класса, которые все будут вызывать dbReadTable.

Спасибо.

1 Ответ

2 голосов
/ 19 ноября 2011

Вот лучший способ, без дополнительной переменной:

dbReadTableA1: =>
  $.ajax
    async: false
    type: "GET"
    url: "ajax/getcolumnnames"
    dataType: 'json'
    success: (data) =>
      @columnNames = data

Ключ - это двойная стрелка, которая связывает this с вашим экземпляром класса в обратном вызове success, что делает @columnNames доступным внутри функции. Это также предполагает, что dbReadTableA1 объявлен как функция-член в классе.

...