Лифт, флот и JQuery

Я новичок в фреймворке Lift, и последние пару дней я играл с виджетом Flot. Мне очень нравится тот факт, что у меня есть фасад для javascript Flot, написанного на Scala. Однако я столкнулся с некоторыми проблемами, когда попытался добавить в график больше интерактивных функций.

Что я пытаюсь сделать, так это позволить пользователю увеличивать точки данных на графике. В основном я пытаюсь выполнить этот пример, но в лифте: http://people.iola.dk/olau/flot/examples/zooming.html.

Суть масштабирования обрабатывается этим javascript:

 $("#placeholder").bind("plotselected", function (event, ranges) {
    // do some checks on the ranges...

    // do the zooming
    $.plot($("#placeholder"), getData(...),
                  $.extend(true, {}, options, {
                      xaxis: { min: ranges.xaxis.from, max: ranges.xaxis.to },
                      yaxis: { min: ranges.yaxis.from, max: ranges.yaxis.to }
                  }));

Как лучше всего это сделать в Lift? В приведенном выше коде я генерирую график на чистом javascript, но виджет flot должен делать это за меня. Кажется неправильным иметь этот код дважды, один раз с использованием виджета Flot и еще раз здесь, в необработанном javascript. Я не уверен, следует ли мне перемещать приведенный выше фрагмент кода в Scala. Более того, я не нашел никакой документации о том, как выполнить привязку jQuery в Scala DSL. Любая помощь / совет будут очень благодарны!

Спасибо!

И еще один нюанс ... Для масштабирования требуется плагин jquery.flot.selection, поэтому мне пришлось добавить его в свой проект Lift вручную. Это нормально, за исключением того, что jquery.flot.js встраивается автоматически. Когда я добавил плагин flot.selection, моя версия плагина была слишком новой для jquery.flot.js, включенного в Lift. Мне пришлось рыться в банках, чтобы выяснить, какая версия плагина выбора мне нужна.

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

Ладно ... Я перестану разглагольствовать :) Еще раз спасибо за помощь.


person shj    schedule 17.04.2011    source источник


Ответы (1)


Я не могу комментировать аспект платформы Lift, но для самого flot нет никакого способа обойти необходимость повторного вызова графика с почти тем же набором параметров и данных.

Если бы вы писали все это сами, я бы сказал, что просто напишите функцию, которая принимает объект диапазонов и вызывает за вас график, и вызывает это при загрузке страницы и в функции plotselected. Как бы то ни было, два звонка - ваш единственный достойный вариант.

person Ryley    schedule 18.04.2011
comment
Спасибо за ответ! На самом деле проблема не столько в flot, сколько в интеграции Lift в flot. Прямо сейчас я вызываю flot с помощью Lift API - и похоже, что на самом деле единственный способ сделать масштабирование - использовать собственный Flot API. Думаю, мне придется отказаться от Lift API и использовать чистый javascript (в основном делать то, что вы описали выше). - person shj; 21.04.2011