Utilisation de Modèles de Jade (jade-lang.com) côté client

Je voudrais utiliser des modèles Jade côté client. De préférence généré à l'aide du pipeline D'actifs Rails 3.1. Je ne peux pas vraiment comprendre comment faire ça.

Quelqu'un qui est tombé sur le même problème et a trouvé une excellente solution? Toutes les pensées sont beaucoup apprécié.

22
demandé sur sandstrom 2011-07-05 00:19:33

8 réponses

PS: probablement maintenant la réponse de Substack est meilleure.


Browserify

Peut-être que vous pouvez utiliser https://github.com/substack/node-browserify

Côté navigateur require () pour votre nœud modules et paquets npm

Pointez simplement un ou deux fichiers javascript sur browserify et il marchera L'AST à lisez tous vos require()récursivement. Le paquet résultant a tout vous avez besoin, y compris en tirant les bibliothèques vous peut avoir installé à l'aide de npm!

Navigateur

Http://jsperf.com/dom-vs-innerhtml-based-templating/53 = > la performance n'est pas si grande selon ce benchmark = > http://gist.github.com/raw/550723/12d176698628e30a1df398c7ac7aea93924e1294/jade.js . mais selon TJ, il n'a jamais été censé être utilisé dans le navigateur, mais node.js à la place. Dans ce cas, il va être assez rapide. Il y a beaucoup d'alternatives que vous pouvez utiliser dans le navigateur plutôt.

6
répondu Alfred 2017-05-23 11:45:36

Si vous utilisez browserify vous pouvez utiliser ce middleware Jade pratique: jadeify. Ensuite, vous pouvez simplement appeler jadeify("foo.jade", { x : 4, y : 5 }) côté navigateur après avoir pointé un répertoire views sur le middleware et vous récupérez un handle jquery.

31
répondu substack 2011-07-09 05:15:37

Caisse Lame. C'est un moteur de modèle HTML de type Jade conçu pour une utilisation côté client (et Côté Serveur). Il y a d'autres fonctionnalités que vous pourriez aimer, aussi bien.

EDIT:, Mais seulement pour le Nœud.serveurs js. Il n'y a pas d'implémentation Ruby pour le moment.

7
répondu BMiner 2012-05-11 17:39:27

Cette fonctionnalité est maintenant disponible dans Jade. http://jade-lang.com/api/

À partir de leurs Documentations API:

var jade = require('jade');

// Compile jade file to a function
var fn = jade.compileClient('string of jade', options);

// Later in client site, render the function to HTML
var html = fn(locals);

Vous devez passer la fonction JavaScript compilée au client, par exemple en écrivant la fonction (fn dans l'exemple) à A.fichier js, puis inclure le .fichier js dans le fichier html avec la balise script.

Une autre option utilise templatizer, qui compile jade en a.fichier js pour vous.

5
répondu shak 2015-03-02 19:36:49

J'ai écrit une gemme appelée tilt-jade pour le faire dans le pipeline d'actifs. Il est fait pour fonctionner exactement comme le fait EJS avec les pignons par défaut-il rend les modèles Jade en fonctions afin qu'ils puissent être appelés côté client. Je ne suis pas sûr que ce soit une excellente solution, mais cela a bien fonctionné pour mes besoins.

3
répondu therabidbanana 2011-11-21 16:13:50

Je viens de créer une bibliothèque pour rendre jade disponible en html côté client. C'est aussi simple que .... Découvrez-le: https://github.com/charlieamer/jade-query

2
répondu charlieamer 2014-09-16 13:37:33

Jade prend désormais en charge la compilation pour le client par défaut; utilisez l'option -c --client. Voir http://jade-lang.com/command-line.

2
répondu Mihai Rotaru 2015-09-01 20:42:42

Voici une version hacky mais simple pour browserify en utilisant gulp-jade.

var jade = require('gulp-jade'),
    replace = require('gulp-replace');

gulp.task('jade-client', function() {
    gulp.src('./views/**/*.jade')
        .pipe(jade({
            client: true
        }))
        .pipe(replace(/function template/g, 'var jade = require("gulp-jade/node_modules/jade/lib/runtime");\n\nmodule.exports = function'))
        .pipe(gulp.dest('./client/templates'));
});

Puis dans mon fichier JS côté client...

var template = require('./path_to_compiled_template_file');
var renderedTemplateHtml = template({ aLocal: 'blah blah'});

Vous n'envoyez donc au client que les modèles spécifiques dont vous avez besoin et browserify s'assure que vous n'avez qu'une seule copie du runtime.

1
répondu Ian Warburton 2014-12-10 18:05:48