Как мне обновить содержимое заполнителя сгенерированным изображением в Rails? - PullRequest
0 голосов
/ 01 декабря 2008

У меня есть тег div в представлении, которое я хотел бы обновить с помощью графика, который я генерирую с помощью Gruff.

У меня есть следующее действие контроллера, которое делает это в конце

send_data g.to_blob, :disposition=>'inline', :type=>'image/png', :filename=>'top_n.pdf'

Теперь, если я вызову это действие напрямую, я смогу увидеть график. (Подробнее здесь , если требуется.)

Если я добавлю link_to_remote_tag, который вызывает вышеуказанное действие через AJAX, передавая определенный ввод, генерирует этот график и пытается обновить тег div заполнителя ... Я вижу бред

Я думаю, что я могу записать график в png-файл с g.write(filename.png) как мне встроить график в тег div в представлении во время выполнения?

Ответы [ 2 ]

1 голос
/ 01 декабря 2008

В вашем теге link_to_remote просто установите: завершить примерно так:

:complete => "updateImg(id_of_div, request.responseText)"

И написать функцию JS:

function updateImg(id, img)
{
  $(id).innerHTML = '<img src="' + img + '" />';
}

Где id_of_div - это идентификатор div, когда вы хотите показать изображение.

Аргумент request.responseText происходит от запроса вызова AJAX, я имею в виду, когда ваш код записывает png-файл с графиком, завершите метод, возвращая путь к этому новому png (render: text => path_to_new_image); затем используйте эту переменную запроса в: complete.

0 голосов
/ 01 декабря 2008

Вы можете использовать обычный тег img для вызова действия контроллера, которое возвращает сгенерированный png. Если вы настроили контроллер на использование response_to примерно так:

def graph
    # get the relevant data for 'g' here
    respond_to do |format|
        format.html #uses the default view if relevant (good for debugging)
        format.png do 
            send_data g.to_blob, 
                :disposition=>'inline', 
                :type=>'image/png', 
                :filename=>'top_n.pdf' 
        end
    end
end

У вас даже будет обычный URL для генератора, подобный этому:

<img src="controller/graph.png" alt="Something"/>

Если есть вероятность, что генерация изображения может быть неудачной: вы можете сохранить запасное изображение на сервере, прочитать этот файл и вернуть его.

Если генерация довольно тяжелая и вряд ли изменится все время, когда вы все время заморозите, кешируйте полученный файл и получите его вместо этого, если решите, что данные не изменились. Вы можете использовать метод, предложенный ARemesal, чтобы отложить добавление ссылки на изображение до тех пор, пока изображение не будет сгенерировано, а затем сделать ссылку непосредственно на кэшированный файл. (Это зависит от вашего конкретного случая, что лучше)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...