2012-05-01 2 views
0

У меня есть блок как:Как я могу вызвать ajax, без «link_to» вроде помощников?

 - competitors.each do |competitor| 
     %dl 
      %dt 
      ... 
      %dd 
      %span{:id => "#{competitor['watchers']}"}= "#{((competitor['watchers']*100.0)/30000).round.to_f}%" 

отмечают, что он генерирует динамичную CSS идентификатор, один каждый блок clicle, resoulting HTML список различных дд -> диапазон -> идентификационный номер:

<dl> 
    <dt> 
    ... 
    <dd> 
     <span id="774">93.0%</span> 
    </dd> 
    </dt> 
</dl> 
<dl> 
    <dt> 
    ... 
    <dd> 
     <span id="13774">46.0%</span> 
    </dd> 
    </dt> 
</dl> 

Я хочу "динамично" ассоциированные "пользовательские CSS сниппет", к различным Css идентификаторам (# 13774 # 774), что-то вроде:

:javascript 
    $("##{competitor['watchers']}").css({ width: "#{((competitor['watchers']*100)/30000)}px" }); 

Как я могу позвонить Аяксу (в Rails 3.2.3 ': remote => true') без ссылки на какие-то помощники?

Недо теперь я попытался просто звоню JS от внутреннего блока, как:

 - competitors.each do |competitor| 
     :javascript 
      $("##{competitor['watchers']}").css({ width: "#{((competitor['watchers']*100)/30000)}px" }); 
     %dl 
      %dt 
      ... 
      %dd 
      %span{:id => "#{competitor['watchers']}"}= "#{((competitor['watchers']*100.0)/30000).round.to_f}%" 

, но он не работает, то код никогда не вводится в DOM.

+0

Можете ли вы использовать: remote => true вариант в link_to? –

ответ

1

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

Изменения вашего блок для добавления уникального класса в каждый интервал. Это дает вам преимущества стиля позже.

%dd 
     %span{:id => "#{competitor['watchers']}", :class => "progress-bar"}= "#{((competitor['watchers']*100.0)/30000).round.to_f}%" 

Тогда вы должны быть в состоянии использовать некоторые JQuery в нижней части страницы, чтобы выбрать каждый из них, и сделать некоторые основные математике на нем:

$('span.progress-bar').each(function(index,element){ 
    var num = $(element).attr('id'); // get element id 
    var width = parseInt(num * 100/30000); // do your math, then get the integer value for width 
    $(element).css('width',width+'px'); // set width 
} 

Я знаю, что вы искали AJAX, но если я чего-то не упускаю, это должно приблизиться к решению ваших проблем, как это описано.

+0

Извините Luca, вы разместили javascript внутри страницы html.erb или добавили его в код rails? Я бы добавил его к нижней части страницы html.erb, так как он будет запущен, как только браузер увидит его, и вам понадобятся все элементы на странице, прежде чем он будет работать. Это помогает? – MaddHacker

+0

Вы также не нуждаетесь в этом в своем цикле конкурентов. Любой, вы хотите его после этого. – MaddHacker

+0

Я уже поставил js на дно html.haml и отбросил js из цикла конкурентов.each, но все равно пропустил что-то ... Я не вижу «введенную ширину + 'px» в html/css, которая появляется на странице ... чтобы быть верным, я бы ожидал увидеть 46.0% после js action, вместо этого я просто вижу 46.0%

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