Импортировать javascript динамически с помощью jQuery? - PullRequest
1 голос
/ 15 июня 2009

Я пытаюсь настроить каркас виджета с помощью jQuery, поэтому мне нужно импортировать скрипт Java, анализируя xhtml виджета и включая его на страницу фреймворка Проблема в том, что это может привести к загрязнению пространства имен. Можно ли загрузить сценарий Java в пространство имен во время выполнения?

Возможно, есть какой-то лучший метод, который я пропускаю?

Спасибо, Пит

Ответы [ 3 ]

1 голос
/ 15 июня 2009

Вы можете сделать что-то вроде этого ...

var myOtherFramework = null;

$.get("myScript.js", function(data) {
  myOtherFramework = eval("(" + data + ")");
});

А потом ссылаться на него как ...

myOtherFramework.funcName();
1 голос
/ 16 июня 2009

А.С. Джош Стодола упомянул, что создание переменной во время выполнения не проблема

var holdsWidgetUUID = "widgetUUIDValue";
eval(holdsWidgetUUID + "= (" + data + ")");
alert(eval(holdsWidgetUUID));

Или, если вы предпочитаете

var UUID = "widgetUUID";
var holdsWidgetUUID = "widgetUUIDValue";
window["widgets"] = new Array();
window["widgets"][holdsWidgetUUID] = data;
alert(window["widgets"][holdsWidgetUUID]);

Проблема заключается в том, что загруженный javascript работает так, чтобы его можно было вызывать как dynamicvariablename.methodname ()

У меня есть рабочее решение, если вы наложите определенную практику кодирования на включенный JavaScript. Может быть, это приведет вас в правильном направлении.

Это виджет JavaScript (works.js). Заметим, что это «класс» javascript с внутренне определенными полями и методами. Что само по себе поддерживает низкий уровень загрязнения пространства имен и позволяет нам достичь желаемой формы вызова x.getInfo ()

function () {
    this.type = 1;
    this.color = "red";
    this.getInfo = function() {
        return this.color + ' ' + this.type + ' widget';
    };
}

И это файл, который включает его во время выполнения в пространстве имен

<html>
<head>
  <title>Widget Magic?</title>
  <script type='text/javascript' src='jquery.js'></script>
  <script type='text/javascript'>
    var UUID = "widgetUUID";
    var holdsWidgetUUID = "widgetUUIDValue";
    window["widgets"] = new Array();
    $.get("works.js", function(data) {
      window["widgets"][holdsWidgetUUID] = eval("(" + data + ")");
      $(document).ready(function() {
        window["widgets"][holdsWidgetUUID] = new (window["widgets"][holdsWidgetUUID])();
        alert(window["widgets"][holdsWidgetUUID].color);
        alert(window["widgets"][holdsWidgetUUID].getInfo());
      });
    });
  </script>
</head>
<body>
  <p>Just some stuff</p>
</body>
</html>
0 голосов
/ 15 июня 2009

Загружаемый JavaScript должен сам по себе уже использовать уникальные пространства имен.

...