2011-04-17 4 views
1

Je suis nouveau dans le framework Lift, et depuis quelques jours je joue avec le widget Flot. J'aime vraiment le fait que j'ai une façade au Flav javascript écrit en Scala. Cependant, j'ai rencontré quelques problèmes lorsque j'ai essayé d'ajouter plus de fonctionnalités interactives au graphique.Lift, Flot & JQuery

Ce que je tente de faire est de permettre à l'utilisateur de zoomer sur les points de données dans le graphique. Fondamentalement, j'essaye d'accomplir cet exemple, mais dans l'ascenseur: http://people.iola.dk/olau/flot/examples/zooming.html.

La viande du zoom est gérée par ce 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 } 
        })); 

Quelle est la meilleure façon de le faire dans Lift? Dans le code ci-dessus, je génère l'intrigue en pure-javascript, mais le widget flot est censé faire cela pour moi. Il semble incorrect d'avoir ce code deux fois, une fois en utilisant le widget Flot et encore une fois ici en javascript brut. Je ne suis pas sûr si je devrais déplacer le morceau de code ci-dessus dans Scala. De plus, je n'ai trouvé aucune documentation sur la façon de faire une liaison jQuery dans la Scala DSL. Toute aide/conseil serait grandement appréciée!

Merci! Le dernier plugin ... Le plugin jquery.flot.selection est requis pour effectuer un zoom, donc j'ai dû l'ajouter manuellement dans mon projet Lift. C'est bien, sauf que le jquery.flot.js est intégré automatiquement. Quand j'ai ajouté le plugin flot.selection, ma version du plugin était trop récente pour le jquery.flot.js inclus avec Lift. J'ai dû faire une spéléologie à travers les bocaux pour trouver la version du plugin de sélection dont j'avais besoin. Maven m'a déjà fait brûler un certain nombre de fois où une bibliothèque incluait une autre bibliothèque automatiquement pour moi ... Je me rends compte que le JavaScript peut être différent mais je suis encore timide quand il s'agit de bibliothèques, y compris d'autres bibliothèques .

D'accord ... Je vais arrêter rodomontades maintenant :) Merci encore pour l'aide.

Répondre

0

Je ne peux pas commenter l'aspect plate-forme de levage, mais pour Flot lui-même, il n'y a pas moyen de contourner la nécessité de ré-appel terrain avec presque le même ensemble d'options et de données. Si vous écrivez le tout vous-même, je dirais qu'il suffit d'écrire une fonction qui prend l'objet range et appelle plot pour vous, et appelle cela sur le chargement de la page et dans la fonction plotselected. Tel qu'il est, deux appels est votre seule option décente.

+0

Merci pour la réponse! Le problème n'est pas tellement avec Flot qu'avec l'intégration Lift de Flot. En ce moment j'appelle flot avec une API Lift - et il semble que la seule façon de faire du zoom est d'utiliser l'API Flot native. Je pense que je vais devoir abandonner l'API Lift et utiliser du javascript pur (essentiellement faire ce que vous avez décrit ci-dessus). – shj