Korzystanie z gotowych szablonów z kierownicą.js (jQuery Mobile environment)

Zmagam się nieco z pre-kompilacją szablonów w kierownicy. Mój projekt jQuery Mobile robi się dość duży i chcę wstępnie skompilować szablony, których używam.

Jednak nie mogę znaleźć dobrego wyjaśnienia (jak samouczek krok po kroku) jak to zrobić z kierownicą.

Nadal mam wszystkie szablony w linii używając znaczników skryptu. Mam zainstalowaną kierownicę za pomocą NPM. Ale teraz jestem trochę zagubiony w tym, jak postępować.

Zgaduję robienie czegoś takiego

handlebars -s event.handlebars > event.compiled

I jakoś włączając to wydarzenie.skompilowana treść? Ale potem, jak to nazwać.

Tak nazywam Moje szablony

var source = $('#tmpl_profile').html(),
template = Handlebars.compile(source),
context = user.profile()),
html    = template(context);
Mam nadzieję, że ktoś może rzucić trochę światła na to dla mnie.
Author: user4035, 2011-12-28

5 answers

Więc po wielu próbach i błędach (co jest najlepszym sposobem, aby się tego nauczyć) oto sposób, który działa dla mnie.

Po pierwsze-uzewnętrznij wszystkie szablony, powiedzmy, że masz szablon wewnątrz znaczników skryptu, takich jak

<script id="tmpl_ownevents" type="text/templates">
    {{#unless event}}
        <div class="notfoundevents"><p>No events for you</p></div>    
    {{/unless}}
</script>

Utwórz nowy plik o nazwie events.tmpl i skopiuj / wklej do niego szablon. Pamiętaj, aby usunąć elementy skryptu samodzielnie, to gotcha ugryzł mnie w a..

Zainstaluj skrypt wiersza poleceń w ten sposób

npm install -g handlebars

Przejdź do folderu, który zapisałeś wydarzenia.tmpl into and run

handlebars events.tmpl -f events.tmpl.js

Dołącz skompilowany javascript do HTML po dołączeniu kierownicy.js

<script src="events.tmpl.js"></script>

Teraz pozostaje tylko zmienić zwykły kod szablonu na coś przypominającego następujący

var template = Handlebars.templates['events.tmpl'], // your template minus the .js
    context = events.all(), // your data
    html    = template(context);

I tu masz, super szybkie wstępnie skompilowane Szablony kierownicy.

 112
Author: Marco,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-10-10 21:41:01

Kolejną świetną opcją jest użycie GruntJS . Po zainstalowaniu:

Npm install grunt-contrib-handlebars --save-dev

Potem w Twoim gruntfile.js

grunt.initConfig({
    dirs: {
      handlebars: 'app/handlebars'
    },
    watch: {
      handlebars: {
        files: ['<%= handlebars.compile.src %>'],
        tasks: ['handlebars:compile']
      }
    },
    handlebars: {
      compile: {
        src: '<%= dirs.handlebars %>/*.handlebars',
        dest: '<%= dirs.handlebars %>/handlebars-templates.js'
      }
    }
});


grunt.loadNpmTasks('grunt-contrib-handlebars');

Następnie po prostu wpisz grunt watch z konsoli, a grunt automatycznie skompiluje wszystkie *.pliki na kierownicy-szablony.plik js.

Naprawdę fajny sposób na pracę z kierownicą.
 15
Author: Scott Silvi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-11-29 20:40:56

Oto Jak to robię:

Przygotowanie

Zakładamy, że wszystkie zmienne szablonu są w zmiennej o nazwie context:

var context = {
    name: "Test Person",
    ...
};

Gdzie umieścić swoje szablony

Utwórz katalog zawierający wszystkie szablony (nazwiemy go templates/) Dodaj tutaj swoje szablony o nazwie filename.handlebars.

Twoja struktura katalogów:

.
└── templates
    ├── another_template.handlebars
    └── my_template.handelbars

Kompilowanie szablonów

Najpierw przejdź do katalogu głównego, a następnie skompiluj szablony za pomocą npm CLI program:

handlebars templates/*.handlebars -f compiled.js

Nowa struktura katalogów:

.
├── compiled.js
└── templates
    ├── another_template.handlebars
    └── my_template.handlebars

Użycie

Dołącz compiled.js do strony HTML po dodaniu runtime:

<script src="handlebars.runtime.js"></script>
<script src="compiled.js"></script>

Renderuj swoje szablony używając globalnego Handlebars obiektu:

// If you used JavaScript object property conform file names
// Original filename: "my_template.handlebars"
Handlebars.templates.my_template(context)

// if you used special characters which are not allowed in JavaScript properties
// Original filename: "my-template.handlebars"
Handlebars.templates["my-template"](context)

Uwagi

Zwróć uwagę na rozszerzenie pliku .handlebars. Jest on automatycznie usuwany podczas kompilacji szablonów.

Extra: jeśli używasz jednego z Idów Jetbrains razem z wtyczkąKierownica/wąsy , możesz uzyskaj nawet całkiem dobrą obsługę edytora.

 10
Author: apfelbox,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-02-19 17:45:23

Precompilowanie szablonów kierownicy z gruntem

Zakładając, że masz węzeł.js zainstalowany. Jeśli nie, zrób to.

1) Ustawianie zależności węzłów:

W katalogu głównym aplikacji Dodaj plik o nazwie package.json. Wklej do tego pliku:

{
  "devDependencies": {
   "grunt-contrib-handlebars": "~0.6.0",
    "grunt-contrib-watch": "~0.5.3",
    "handlebars": "~1.3.0"
  },
}

Ten plik JSON informuje węzeł o pakietach, które musi zainstalować. Pomaga to innym programistom bardzo szybko rozpocząć pracę, co zobaczysz w następnym kroku.

2) Instalacja Węzła Zależności:

W terminalu / wierszu poleceń / powershell, cd w głównym katalogu projektów i uruchom następujące polecenia:

npm install grunt -g
npm install grunt-cli -g

I aby zainstalować zależności wymienione w pakiecie.json:

npm install

Teraz zainstalowałeś wszystkie potrzebne zależności węzłów. W głównym katalogu projektów zobaczysz node_modules folder.

3) Konfigurowanie Grunt:

W katalogu głównym projektu Utwórz plik o nazwie Gruntfile.js. Wklej poniższy tekst do plik:

module.exports = function(grunt) {

    var TEMPLATES_LOCATION        = "./src/templates/",       // don't forget the trailing /
        TEMPLATES_EXTENSION       = ".hbs",
        TEMPLATES_OUTPUT_LOCATION = TEMPLATES_LOCATION,       // don't forget the trailing /
        TEMPLATES_OUTPUT_FILENAME = "compiled_templates.js";  // don't forget the .js

    grunt.initConfig({
        watch: {
            handlebars: {
                files: [TEMPLATES_LOCATION + '**/*' + TEMPLATES_EXTENSION],
                tasks: ['handlebars:compile']
            }
        },
        handlebars: {
            compile: {
                src: TEMPLATES_LOCATION + '**/*' + TEMPLATES_EXTENSION,
                dest: TEMPLATES_OUTPUT_LOCATION + TEMPLATES_OUTPUT_FILENAME,
                options: {
                    amd: true,
                    namespace: "templates"
                }
            }
        }
    });

    grunt.loadNpmTasks('grunt-contrib-handlebars');
    grunt.loadNpmTasks('grunt-contrib-watch');

}

4) Konfigurowanie do własnych upodobań:

Jeśli nie używasz Wymagaj.js, będziesz chciał zmienić handlebars.compile.options.amd na false. Możesz również dostosować opcję namespace do swoich upodobań. Jeśli używasz modułów require/amd, właściwość przestrzeni nazw jest nieistotna(domyślnie jest to "JST", jeśli ją usuniesz).

Ponieważ wszystkie struktury projektu są trochę inne, musisz trochę skonfigurować plik gruntowy. Modyfikuj stałe TEMPLATES_LOCATION, TEMPLATES_EXTENSION, TEMPLATES_OUTPUT_LOCATION, TEMPLATES_OUTPUT_FILENAME aby dopasować się do twojego projektu.

Jeśli szablony są rozrzucone po całej aplikacji, będziesz chciał zmienić TEMPLATES_LOCATION na najniższy możliwy katalog. Upewnij się, że szablony są odizolowane od twoich node_modules, bower_components lub innych katalogów firm trzecich, ponieważ nie chcesz, aby Grunt kompilował szablony firm trzecich do skompilowanych szablonów aplikacji. Jeśli umieścisz cały własny kod w ./src, ./js, ./app katalog, będziesz ok.

5) Kompilowanie szablonów z gruntem:

Aby uruchomić grunt w tle, otwórz terminal i cd w głównym katalogu projektów i uruchom polecenie: grunt watch:handlebars (działa również grunt watch). Gdy grunt działa w tle, wszystkie zmiany w plikach szablonów zostaną automatycznie skompilowane, a plik wyjściowy określony {24]} zostanie przepisany w razie potrzeby. Wynik będzie wyglądał mniej więcej tak:

Running "watch" task
Waiting...

Aby uruchomić zadanie kompilacji samodzielnie, otwórz terminal i cd do głównego katalogu projektów i uruchom polecenie: grunt handlebars:compile (działa również grunt:handlebars). Wynik będzie wyglądał mniej więcej tak:

Running "handlebars:compile" <handlebars> task
File "./src/templates/compiled_templates.js" created.

Done, without errors.
 6
Author: Cory Danielson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-07-25 04:01:18

Dla kierownicy 2.0.0 alpha Update:

@Macro wyjaśnił dość jasno, jak to działa z 1 kawałkiem szablonu, zobacz ta odpowiedź, jak zrobić kierownicę.js works

Jeśli widzisz "TypeError:' undefined 'is not a function" podczas używania wstępnie skompilowanych szablonów:

Ten błąd wystąpił w " kierownica.runtime.js " linia 436 przy ewaluacji templateSpec.call(container, Handlebars, context, options.pomocnicy, opcje.częściowe, opcje.dane),

Ponieważ zainstalowany kompilator npm nie pasuje do tego używanego przez przeglądarkę. Najnowsza stabilna wersja pobrana jest v1. 3. 0, podczas gdy jeśli używasz npm install handlebars, zainstaluje 2.0.0-alpha4 dla Ciebie.

Proszę sprawdzić to używając

handlebars any_your_template_before_compile.handlebars | grep "compiler"

Który da Ci jak, jeśli rzeczywiście zainstalowałeś kierownicę 2.0.0-alpha4:

this.compiler = [5, '>=2.0.0']

Z numerem pierwszym oznacza wersję dla Twojego kompilatora kierownicy. Wpisz poniższy kod w konsoli przeglądarki, sprawdź czy wynik pasuje do wersji.

Handlebars.COMPILER_REVISION

Jeśli masz kompilator 5 z przeglądarką revison 4, wtedy będziesz miał powyższy problem.

Aby to naprawić, zainstaluj kierownicę 1.3.0 za pomocą następującego polecenia

npm install [email protected] -g

Następnie spróbuj skompilować go ponownie, zobaczysz, że tym razem, to daje pasujące informacje o wersji i jesteś dobry, aby przejść z wstępnie skompilowanych szablonów.

this.compilerInfo = [4, '>=1.0.0']


Po prostu wyjaśnij, jeśli masz mnóstwo szablonów:

Najpierw uzewnętrznić każdy element Twoich szablonów: event.kierownica, item.kierownice itp... Możesz umieścić je wszystkie w jednym folderze, powiedzmy "/templates"

Skompiluj wszystkie pliki i połącz je w 1 plik za pomocą następującego polecenia:

handlebars *.handlebars -f templates.js

I obejmują kierownicę.runtime, ten plik w Twoim HTML

<script src="/lib/handlebars.runtime.js"></script>
<script src="templates.js"></script>

Szablony zostaną wstrzyknięte do kierownicy.szablony według ich nazwy. Na przykład zdarzenie.do kierownicy można dostać się za pomocą kierownicy.tempaltes ["wydarzenie"].

 3
Author: yeelan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:47:05