2013-04-10 13 views
5

Buduję aplikację na Pi-engine (aparat aplikacji PHP oparty na Zend Framework 2).Czy istnieje sposób, aby ustawić baseurl dynamicznie w require.js?

W mojej aplikacji ścieżka do pliku javascript zależy od nazwy aplikacji, a nazwa aplikacji to wybrana przez instalatora.

Na przykład adres URL require.js byłoby:

http://my.site.name/asset/module-{module_name}/script/js/require.js

zmiany module_name według tego, co nazwać wniosku podano.

wiem, że mogę umieścić ścieżkę w atrybucie „dane-main” w backend jak:

<script data-main="/asset/module-{module_name}/script/" src="/asset/module-{module_name}/script/js/require.js"></script> 

Ale chcę wiedzieć, czy jest jakiś sposób, aby ustawić baseurl dynamicznie przy użyciu javascript, dzięki czemu nie muszę dotykać backendu.

Odpowiedz

0

Jeśli dobrze zrozumiałem twoje pytanie, możesz użyć "baseUrl" w obiekcie konfiguracyjnym, gdzie możesz ustawić ścieżkę, w której znajdują się pliki js.

require.config({ 
    baseUrl: "/js/" 
}); 
+0

Jeśli używam 'baseURL:„/ js /”', tym ścieżka żądania staje się 'http: // my.site.name/js/target.js'. – user1522830

10

http://requirejs.org/docs/api.html#config

Ponadto można zdefiniować obiekt config jako zmiennej globalnej wymaga przed require.js jest załadowany, i mają wartości stosowane automatycznie. Przykład ten określa pewne zależności załadować jak najszybciej require.js definiuje require():

<script> 
    var require = { 
     baseUrl: generateBaseUrl() 
    }; 
</script> 
<script src="scripts/require.js"></script> 
0

W celu uniknięcia zanieczyszczenia zasięgu globalnym, można owinąć dynamiczny kod config jak w Twoim przypadku w funkcji bezpośrednio wykonującym:

require.config((function(){ 
    var scripts = document.getElementsByTagName("script"); 
    return { 
     baseUrl: '/asset' + scripts[scripts.length-1].src.match(/\/module.*?\//)[0] 
    }; 
})()); 
Powiązane problemy