Как переключить console.log в виджете jQuery? - PullRequest
3 голосов
/ 19 января 2011

В последнее время я работаю над некоторым виджетом jQuery для работы / веселья ( github ), и все еще есть что-то, что меня беспокоит.

Когда я использую виджет в своем приложении, я хочу иметь возможность передать опцию отладки, которая будет включать или отключать ведение журнала (используя console.log) только в этом плагине.


лучшее решение на данный момент:

от:

(function( $, undefined ) {

})(jQuery);

до:

(function( $, console, undefined ) {

    if (!o.debug) console = { log: function(){} };

})(jQuery, console);

Осталась одна проблема

Если я загружаю два виджетакак:

$myDiv.myWidget({debug: true});
$myDiv2.myWidget({debug: false});

У меня не будет более поздней отладки с 1-го экземпляра.Есть идеи?


[оригинал] Пока я использовал фрагмент кода, который нашел в интернете:

var logger = function() {
    var oldConsoleLog = null;
    var pub = {};

    pub.enableLogger = function enableLogger() {
        if(oldConsoleLog == null) return;
        window['console']['log'] = oldConsoleLog;
    };

    pub.disableLogger = function disableLogger() {
        oldConsoleLog = console.log;
        window['console']['log'] = function() {};
    };

    return pub;
}();

Затем на _create() я могу сделатьЧто-то вроде:

if (!o.debug) {
        logger.disableLogger();
}

Выглядело довольно хорошо, однако, это не специфично для плагина, так как это отключит console.log для всего моего приложения.

Одним важным моментом является то, что я хочу бытьв состоянии сохранить функцию ведения журнала console.log (без переноса console.log, поскольку, насколько я знаю / попытался, он заменит информацию о строке регистрации на бесполезную завернутую строку вызова).

Спасибо!

Ответы [ 3 ]

3 голосов
/ 19 января 2011

Самый простой вариант, который я могу придумать, это переопределить консоль внутри вашей области видимости. Вот так.

(function(console){
  if (!o.debug) console = { log: function(){} };

  // Rest of your code goes here
})(console);
1 голос
/ 19 января 2011

Я нахожу эту архитектуру странной. Мне кажется, что есть два пути решения этой проблемы. 1) Создайте плагин отладки или 2) сделайте так, чтобы ваш плагин вызывал console.log

В первом случае - я бы всегда создавал плагин отладки, либо с true или false в качестве опции отладки. И я всегда хотел бы, чтобы мой другой плагин вызывал функцию регистрации (если эта функция существует)

В обоих случаях я бы не засорял код операторами if. Я хотел бы, чтобы мой другой плагин имел свой собственный журнал вызовов. В первом случае он будет проверять, существует ли плагин отладки. Во втором случае он проверил бы свою собственную опцию debug, чтобы увидеть, должен ли он console.log или нет.

0 голосов
/ 19 января 2011

Я никогда не использовал скобки для доступа к атрибутам window, но похоже, что это может сработать. Обратите внимание, что если вы дважды наберете disableLogger() без промежуточного вызова enableLogger(), вы не сможете снова включить ведение журнала.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...