2010-11-12 9 views
0

J'essaye de faire cette image montrant mais je n'ai eu aucun succès.chemin relatif dans le fichier externe de javascript

Si je

$.blockUI.defaults.message = '<img src="../images/blockUI_Loader.gif" />'; 

que je reçois de Fiddler

alt text

Si je

$.blockUI.defaults.message = '<img src="../_assets/images/blockUI_Loader.gif" />'; 

que je reçois de Fiddler

alt text

Si je

$.blockUI.defaults.message = '<img src="~/_assets/images/blockUI_Loader.gif" />'; 

que je reçois de Fiddler

alt text

Ma structure de dossier est le suivant

alt text

le fichier js est dans le js dossier.

+0

Travis n'a malheureusement pas accepté de se tromper ... Elle a supprimé sa réponse, puis est venu ici pour downvote ... oh Travis Travis ... – Lorenzo

Répondre

2

Une solution alternative est d'appliquer des classes à vos éléments via JavaScript et définir une image de fond en utilisant CSS.

Relatif url Les chemins d'accès en CSS sont toujours relatifs au fichier de feuille de style, ce qui peut faciliter leur cohérence.

Par exemple

Javascript

$.blockUI.defaults.message = '<div class="blockUI-Loader"></div>'; 

CSS

.blockUI-Loader { 
    /* url path is relative to this CSS file in "_assets/css" */ 
    background-image: url(../images/blockUI_Loader.gif); 
    background-repeat: no-repeat; 
    width: nnpx; /* width of image */ 
    height: nnpx; /* height of image */ 
} 
+0

Donc vous dites que les chemins d'URL sont relatifs au CSS alors que @Amir Raminfar dit qu'ils sont relatifs au HTML ... qui a tort? :) – Lorenzo

+2

Lisez à nouveau ma réponse. Les chemins relatifs dans JavaScript sont relatifs à l'URI appelant (la page). Les chemins relatifs dans les fichiers CSS sont relatifs à l'emplacement du fichier CSS. – Phil

+0

@Phil Brown: désolé! J'ai raté le texte CSS. – Lorenzo

2

Le chemin relatif est relatif au fichier HTML et non au fichier js. Donc, en regardant au-dessus de vos autres fichiers, je suppose que vous avez besoin d'images/...

+0

je l'ai changé aux images/car il devrait être par rapport à la fichier html. –

+0

Fichier HTML? Ce code est à l'intérieur d'une fonction javascript qui est utilisée à partir de presque toutes mes vues mvc ... – Lorenzo

+0

Oui, c'est ce que je supposais. Vous faites vos images relatives au fichier JS. Mais il n'a rien à faire où le fichier js est. C'est relatif à l'endroit où le fichier HTML est parce que c'est là où il est rendu. Si vous l'utilisez plusieurs fois, vous pouvez définir un global comme base = "/ xyz"; puis utilisez la base partout dans votre fichier javascript –

0

Enfin j'ai trouvé le soultion!

$.blockUI.defaults.message = '<img src="_assets/images/blockUI_Loader.gif" />'; 
+0

Ce n'est pas aller travailler si votre page est dans un sous-répertoire – Phil

+0

pourquoi? Toutes mes pages sont dans le sous-répertoire et ça fonctionne bien même si la page est dans un répertoire à deux niveaux de profondeur ... – Lorenzo

+0

Etant donné qu'il s'agit d'une application MVC, la requête L'URL pourrait ressembler 'controller',' controller/action', 'controller/action/id' (étant donné le schéma de routage par défaut), chacun de ceux-ci change l'URI de base pour la requête et donc toutes les demandes de chemin relatif. Par exemple, le premier recherchera votre image dans '_assets/images', le second dans' controller/_assets/images' et le troisième dans 'controller/action/_assets/images' – Phil