2014-09-11 8 views
0

У меня есть следующие js.coffee/CoffeeScript, где я хочу, чтобы получить данные о рынке, как вывод:CoffeeScript углублений с петлей

window.MarketsUI = flight.component -> 
    @defaultAttrs 
    table: 'tbody' 
    filter: '.dropdown-menu a' 

    @refresh = (data) -> 
    $table = @select('table') 
    $table.prepend(JST['market'](market)) for market in data.markets 
    console.log data.markets 

    @filter = (event) -> 
    type = event.target.className 
    return @list.filter() if type == '' 

    @list.filter (item) -> 
     item.values().type == "#{gon.i18n[type]}" 

    @initList = -> 
    options = 
     valueNames: [ 'market', 'currency', 'vol', 'change', 
     'last', 'high', 'low'] 
    @list = new List('marketsX', options) 

    @after 'initialize', -> 

    markets = [] 
    $.getJSON "/api/v2/tickers", (data) -> 
    #markets = [] 
    for cur of data 
     ticker = data[cur].ticker 
     item = {} 
     [ 
     "change" 
     "last" 
     "high" 
     "low" 
     ].forEach (key) -> 
     item[key] = ticker[key] 
     return 

     item.volume = ticker.vol 
     item.market = cur 
     item.currency = cur.substring(3) 
     markets.push item 
     console.log markets 

    markets.sort (a, b)-> 
    a.volume - b.volume 

    @refresh {markets: markets} 

    @initList() 

    @on @select('filter'), 'click', @filter 

моя проблема заключается в том, что объект рынки пуст, когда я утешаю зарегистрировать ее в Функция @refresh. Я получаю только []. Я знаю, что это имеет какое-то отношение к углублениям coffeescript с момента его работы в чистом JS. Он также работает, когда я делаю жесткие данные о рынках.

+0

Можете ли вы предоставить небольшой автономный пример? Там много кода, который не имеет ничего общего с этой проблемой. –

ответ

0

Да, есть очевидный (по крайней мере, когда вы посмотрите на скомпилированный JS) проблемы отступа:

@refresh = (data) -> 
    $table = @select('table') 
    $table.prepend(JST['market'](market)) for market in data.markets 
    console.log data.markets 

Это должно быть

@refresh = (data) -> 
    $table = @select('table') 
    $table.prepend(JST['market'](market)) for market in data.markets 
    console.log data.markets 
#^

Кроме того, это выглядит как markets.sort , @refresh и @initlist звонки должны идти в обратном вызове ajax, но я не уверен, что вы хотите (и вы не сказали нам).

+0

спасибо. Это была очевидная проблема, которую я не видел. Также я переместил остальных в обратный вызов ajax. Однако теперь я получаю ошибку TypeError: undefined не является функцией для this.refresh – domi771

+0

При обращении к методам (или что-либо в этом '/' @ ') вам нужно использовать' => 'для обратного вызова вместо' -> ' , – Bergi

Смежные вопросы