Шаблоны JavaScript виджет и объединение конфигураций


Я сама какое-то время на работу над проектом открытых данных, которые я начал РЕПО здесь:

https://github.com/0xdeadcafe/Open-Hamilton/blob/master/whereare.js

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

Я пытаюсь предотвратить глобальные нарушения пространства имен (оба-стороны), и делает настройку очень простой и прямой вперед.

Прямо сейчас, плагин конфигурации выглядит (это перед моими переписать):

<script type="text/javascript">
    var Config = { height: 500, width: 500 };
    document.write(unescape("%3Cscript src='http://example.com/somecode.js' type='text/javascript'%3E%3C/script%3E"));
</script>

У меня есть несколько проблем с этим, в первую очередь, он использует документ.писать и надеется, что скрипт-теги исполнить так, как я хочу, чтобы они. Я боюсь это будет разрыв страницы, я бы предпочел использовать способы объединения дом ребенка.

Другая проблема здесь-это вы не можете настроить этот сайт просто без введения глобальной переменной.

Я хотел бы сделать что-то, где я могу назвать такие, как:

<script type="text/javascript">
    /*document.createelement script tag... make the
    src equal to the javascript, pass config data by function parameter?*/);
</script>

Так что мой код в основном огромным замком, и я стараюсь сдерживать все это внутри.

(function(conf){
    /*things happen*/
})({
    "conf": "data", 
    "etc":"etc"
});

В код я связан выше я сделал функцию confMerge , что попытки сделать рекурсивный глубокий эксклюзивные заменить на значения по умолчанию быть подавляться настроить данные. Я несколько обеспокоен, что это более-убить в нескольких областях, и может сломаться в другие. Другой моей проблемой является то, что я не могу изменять поведение в зависимости от типа (например, карты Google API может принимать строку в качестве центра параметра, но я представить два номера, мой настроить стиль не может смириться с этим.)

У меня есть несколько правил, и вот что для этого нужно ИЕ6 дружелюбный, я не могу играть с прототипом для прокладки в ES5 стили, и я не могу взорвать чужой сайт с моим плагином, и он должен уметь работать, не давая в среднем сайт с Глобалом все-на-месте взорвать мой виджет.

Мысли?



261
-1
задан 7 сентября 2011 в 01:09 Источник Поделиться
Комментарии
1 ответ

Ничто тебе не мешает поставить закрытие в вокруг части скрипта, поэтому у вас нет глобальных переменных - все, кроме замыкания вызвать утечку памяти в IE6 - в самом деле, Google аналитики это делает.

Переключатель заявление выглядит немного по-Убей в confMerge. Я не уверен, что typeof возвратит данных "XML". Чаще всего, все, что вам нужно сделать, это нужным[я] = конф[я] || по умолчанию[я];, в основном. С объектами и массивами вы просто рекурсивно вниз. Я делал это много раз, так что, насколько я вижу, не о чем беспокоиться.

Я не понимаю, почему вы не можете поддержать строк. Вы всегда можете создать валидатор для этого конкретного имущества.

Обновление:
Я думаю, что я понимаю свою ошибку. Я предположил, что copyMerge сделал мелкую копию. Путь вы делаете это, вы поддерживаете структура дефолтов. Я по-прежнему считаю, однако, что проверка-это лучшее решение, но то, что вы должны сделать, является мелкой копией, поэтому, когда вы видите объект или массив просто добавьте ссылку на нее, а не вызывать copyMerge.

Затем для проверки данных, я считаю, что создание функции проверки для всех свойств является лучшим способом. Таким образом, вы можете распоряжаться имуществом центра и убедиться, что если это строка или объект с двумя свойствами 1 и 0. Если это должен быть массив, вы можете с помощью объекта.прототип.метод toString.применение( объект obj ) === "[объект Array]".

Вы можете поставить проверки функции в copyMerge путем создания объекта нам библиотеки и функции с таким же именем, как свойства, поэтому объект["центр"] или в copyMerge, объект[ я ] , где я === "Центр". Другой способ заключается в том, чтобы copyMerge идти копирование и функция-валидатор для проверки данных.

1
ответ дан 11 сентября 2011 в 02:09 Источник Поделиться