RequireJS a nenalezené soubory při routování URL
- j0hny
- Člen | 33
Zdravím fórum,
před pár dny jsem začal objevovat taje RequireJS a celého konceptu AMD. Myšlenka se mi velice zamlouvá a chtěl bych takovýto přístup k frontendu aplikovat i na svoje projekty v Nette. Všechno se mi podařilo rozchodit, moduly i závistlosti se krásně načítají, knihovny jako nette ajax, jquery nebo Ink (alternativa pro bootstrap) fungují atd.
Radost ale přejde ve chvíly, kdy přepnu na stránku, která nede skrz
default routu. Dejme tomu default routa Homepage:default má URL ve tvaru
localhost/projekt/
a já se přepnu na stránku News:default,
která už má URL ve tvaru localhost/projekt/news
.
Najednou se mi firebug konzole začne plnit stížnostmi requirejs, že
nemůže najít např. jquery na cestě
localhost/projekt/news/js/vendor/jquery/dist/jquery.js
. Tam opravdu
není, protože správně v URL nemá být to „news“, čili název
presenteru přepsaný do hezké url.
Setkal už se někdo s podobným problémem? Víte jak to řešit? Zřejmě půjde o nějakou kravinku, ale už se s tím zabývám x hodin a pořád nemůžu přijít na řešení. Vyzkoušel jsem už mraky různých kombinací konfigurace, ale pořád nic. Níže přikládám aktuální konfiguraci, kde se vše projevuje přesně tak, jak jsem napsal.
Systém: Kubuntu 14.04 (vývoj)
Webserver: Apache 2.4
PHP: 5.5
Nette: aktuální stable
@layout.latte:
<?php
<script src="{$basePath}/js/vendor/requirejs/require.js"></script>
<script>
var absolute_base = {$basePath};
require([absolute_base + '/js/app.js'], function() {
require(['jquery', 'ink'], function($, ink) {
console.log($);
console.log(ink);
});
});
</script>
?>
/js/app.js:
<script>
requirejs.config({
baseUrl: 'js/modules',
paths: {
'jquery': '../vendor/jquery/dist/jquery',
'ink': '../vendor/InkJS/dist/js/ink-all',
'ajax': '../vendor/ajax'
}
});
</script>
- Marek Šneberger
- Člen | 130
Celé jsem to nečetl, jen tipuji: v @layout.latte definuješ absolute_base, ale v js/app.js používáš baseUrl?
//EDIT:
Nebo spíš
baseUrl: absolute_base + 'js/modules',
?
Editoval Marek Šneberger (21. 1. 2015 12:34)
- j0hny
- Člen | 33
Je to tak, ale baseUrl v app.js, což je v podstatě „startovací“ soubor pro requirejs, musí být relativní. Nemám totiž jak do něho předat absolutní cestu. V šabloně jsem zvolil tenhle postup, protože klasický postup <script data-main=„js/app“ src=„require.js“>… mi nefungoval korektně. Problém ale není v tomhle, zkoušel jsem i jiné konfigurace vč. absolutní cesty (hardcoded) a chyba pořád stejná. Každopádně díky za odpověď ;-)
- newPOPE
- Člen | 648
Co tak pouzit v RequireJS baseUrl vid http://requirejs.org/docs/api.html#… a cesta zacne z ‚/‘?.
Editoval newPOPE (16. 3. 2015 19:39)