RequireJS a nenalezené soubory při routování URL

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
j0hny
Člen | 33
+
0
-

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
+
0
-

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
+
0
-

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ěď ;-)

lukas.jenicek
Člen | 15
+
0
-

Ahoj mám stejný problém chci se zeptat jestli si to nějak vyřešil ?

newPOPE
Člen | 648
+
0
-

Co tak pouzit v RequireJS baseUrl vid http://requirejs.org/docs/api.html#… a cesta zacne z ‚/‘?.

Editoval newPOPE (16. 3. 2015 19:39)