Используйте переменные JavaScript, определенные в файле 1 в файле 2, когда файл 2 используется в файле 1 - PullRequest
1 голос
/ 24 декабря 2011

Я пытаюсь сделать следующее.Я пишу код для эскиза, используя Raphael.js, в файле HTML.Чтобы сохранить чистоту файла, я хочу определить длинные пути в отдельном файле pathsFile.js, из которого я могу получить доступ к пути.Хотя я использую Raphael.js, я думаю, что мой вопрос больше связан с Javascript, чем с Raphael.js.

Следующие работы:

<!doctype html>  
<html lang="en">

    <head>
        <meta charset="utf-8">          
        <script src="./raphaelJS/raphael.js"></script>
        <script src="./pathsFile.js"></script>
    </head>

    <body>

        <div id="main">

        <div id="figSellerBuyer"></div>
         <script>
            s = 1;
            attrbs = {stroke: "white", "stroke-width": 2};
            pw = 850;
            ph = 450;

            paper = new Raphael('figSellerBuyer', pw*s, ph*s);
                    market = paper.path(paths.marketBoundary);

          </script> 

</body>
</html> 

, где файл pathsFile.js:

var paths = {
    marketBoundary: "M 20 20 L 500 20 L 500 430 L 20 430 Z"
}

Проблема:

Я хочу заменить жестко закодированные числа в pathsFile.js, чтобы они зависели от переменных pw и ph, определенных в основном файле HTML.Например, если я изменю pathsFile.js на:

var ph = 450;
var paths = {
    marketBoundary: "M 20 20 L 500 20 L 500 430 L 20 " + ph-20 + " Z"
}

, код все еще работает.Но это включает определение ph в pathsFile.js.Есть ли способ, которым я могу прочитать значения, определенные в основном файле HTML.

Спасибо за чтение этого.

1 Ответ

3 голосов
/ 24 декабря 2011

Да - использовать несколько <script> блоков:

<script>
   var s = 1;
   var attrbs = {stroke: "white", "stroke-width": 2};
   var pw = 850;
   var ph = 450;
</script>

<script src="./pathsFile.js"></script>

<script>
   var paper = new Raphael('figSellerBuyer', pw*s, ph*s);
           market = paper.path(paths.marketBoundary);
 </script>

Однако, осознавая глобальное загрязнение пространства имен , это, безусловно, можно устранить. Простым примером этого было бы сначала объявить var myConfig = {}, а затем присвоить все ваши переменные myConfig - так, чтобы использовалась только одна переменная верхнего уровня. (Кроме того, явно объявите все свои переменные с помощью var.)

...