2013-09-09 3 views
0

В этом приложении ROR я пытаюсь отображать/повторно отображать результаты, если пользователь меняет любое из входных значений. Используя инструменты разработчика в Chrome, я могу определить, что соответствующие результаты были рассчитаны и возвращены с использованием Javascript ниже. Я могу выбрать изменение в любом из входных значений и повторить вычисления. Однако я не могу получить Javascript для отображения результатов.Отобразить результаты расчета по запросу AJAX

Ниже я добавил Javascript, соответствующую часть представлений (один основной - один частичный), а также соответствующую часть контроллера.

javascript - drill.js.coffee Я уверен, что мне не хватает чего-то, что позволило мне разместить соответствующий код в том месте, где я указываю с помощью ???

$('document').ready -> 
    if $('#evaluation_assumption_params').length == 1 
    drill_id = $('.form.assumption').attr('data-drillid') 
    $('#evaluation_assumption_params').change((event) -> 
     event.preventDefault() 
     loadAssumptionChange drill_id 
    ) 

loadAssumptionChange = (drill_id)-> 
    data = $('#evaluation_assumption_params').serialize() 
    console.log data 
    $.ajax 
    url:"/drills/#{drill_id}/projection.json" 
    type:"post" 
    dataType: 'json' 
    data: data 
    success: (data,success,xhr)-> 

    # ??? - tried numerous statements including 
    # $('#place_to_add_projection_results').html(data) 
    # $('#ajax').html("<%= escape_javascript(render(:partial => 'drills/evaluation_results')).html_safe %>") 
     # What should go here ??? 

парциальное - _assessment_results.html.erb

<%= simple_form_for :result_list, :html => { class: 'infogroup', id: "evaluation_results", :method => :post }, 
     remote: true do |f| %> 
    <%= content_tag :header, "Results", class: 'infogroup-header'%> 
    <%= content_tag :div, class: 'infogroup-body' do %> 
    <%= content_tag :table, class: 'info', border: 0, cellspacing: 5, cellpadding: 0 do %>  
     <tr> 
     <th>Company</th> 
     <th>SP</th> 
     <th>Mkt Cap</th> 
     ... 
     </tr> 
     <% if @result_list.present? %> 
     <% @result_list.each do |result| %>     
      <tr> 
      <td><%= result.listing_name %></td> 
      <td><%= number_to_currency(result.listing.share_price_dollars, 
        :precision => 3, :delimiter => ',')  %></td> 
    … 

главный экран, соответствующий контроллер действия - investor.html.erb Парциальное выше вызывается этого экрана, а также JavaScript

<% content_for :title, "Drill Investor - Valuations" %> 
… more heading stuff 
<section> 
    <div class="form assumption" data-drillid="<%= @drill.id %>"> 
     <%= render 'assumption_params' %> 
    </div> 

    <div class="form"> 
     <div id="place_to_add_projection_results"> 
     <%= render 'evaluation_results' %> 
     </div> 
    </div> 

контроллер

class DrillsController < ApplicationController 
    before_filter :current_user 
    ... 
    def investor 
     # screens associated allow entry of data as well as display of the results 
    end 

    def projection 
    result_list = Evaluation.generate_projection(@drill.drill_interests, assumption_params) 
    render json: result_list 
    end 

Любая помощь очень ценится

Pierre

ответ

0

Скорее всего, вы получаете список, так что вам придется перебрать результаты и добавить каждый результат вашего контейнера DIV, в целях упрощения, я бы что-то подобное этому в вашем успехе ajax callback:

var $container_div = $("#place_to_add_projection_results"); 
$container_div.empty(); // First clear div just in case 
var evaluations = xhr.responseJSON; 
$.each(evaluations, function(i, evaluation) { 
    $container_div.append("<div"> + evaluation.X + ", " + evaluation.Z +" </div>"); 
}); 

Где X, Z - некоторые свойства вашей модели.

+0

Привет, DevDude, Спасибо, что ответили на вопрос. Я попытался пометить его, но у меня всего 5 репутации (вам нужно 15). – user1854802