Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 01.09.2011, 15:58
rwr rwr вне форума
Новичок на форуме
Отправить личное сообщение для rwr Посмотреть профиль Найти все сообщения от rwr
 
Регистрация: 30.08.2011
Сообщений: 7

Как правильно избавляться от дублирования кода?
День добрый.
Есть 2 js файла, где инициализируется один тот же jquery плагин, с одинаковыми параметрами.

Выношу параметры в отдельный файл, пример:

var autocompleteOptions = {
        minChars: 1,
        delay: 600,
        dataType: 'json', 
        autoFill: true,
        extraParams: {
                country_id: $('#country_id').val()                       
        },
        width: 362,
        parse: function(data) {

        },
        formatItem: function(item) {
                                                 
 
        }
              
};


Подключаю этот файл, перед первыми двумя. И вот проблема, что получаю в качестве значения country_id: undefined.

Подскажите, пожалуйста, как правильно выносить конфиги в отдельные файлы. И вообще как в js бороться с таким дублированием.
Ответить с цитированием
  #2 (permalink)  
Старый 01.09.2011, 16:14
Аватар для walik
Профессор
Отправить личное сообщение для walik Посмотреть профиль Найти все сообщения от walik
 
Регистрация: 09.11.2009
Сообщений: 1,101

Предполагаю что вам следует дождаться загрузки DOM ?
$(function() {
   // Тут инициализация вашего плагина
});
__________________
"Всегда пишите код так, будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете."
Мой сертификат :-D клацай
Ответить с цитированием
  #3 (permalink)  
Старый 01.09.2011, 16:25
rwr rwr вне форума
Новичок на форуме
Отправить личное сообщение для rwr Посмотреть профиль Найти все сообщения от rwr
 
Регистрация: 30.08.2011
Сообщений: 7

walik, все верно. Но получается что область видимости переменных станет только как раз инициализация:
$(function() {
   
});


А мне же нужно, чтобы эти параметры были доступны из других файлов))
Ответить с цитированием
  #4 (permalink)  
Старый 01.09.2011, 19:08
Аватар для walik
Профессор
Отправить личное сообщение для walik Посмотреть профиль Найти все сообщения от walik
 
Регистрация: 09.11.2009
Сообщений: 1,101

Так объявляйте переменные как глобальные и все.
__________________
"Всегда пишите код так, будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете."
Мой сертификат :-D клацай
Ответить с цитированием
  #5 (permalink)  
Старый 01.09.2011, 20:11
Аспирант
Отправить личное сообщение для Black_Prince Посмотреть профиль Найти все сообщения от Black_Prince
 
Регистрация: 11.07.2011
Сообщений: 64

var autocompleteOptions = null;

$(document).ready(function(){

    autocompleteOptions = {
        minChars: 1,
        delay: 600,
        dataType: 'json', 
        autoFill: true,
        extraParams: {
                country_id: $('#country_id').val()                       
        },
        width: 362,
        parse: function(data) {

        },
        formatItem: function(item) {
                                                 
 
        }
              
    };

});
Ответить с цитированием
  #6 (permalink)  
Старый 01.09.2011, 20:26
rwr rwr вне форума
Новичок на форуме
Отправить личное сообщение для rwr Посмотреть профиль Найти все сообщения от rwr
 
Регистрация: 30.08.2011
Сообщений: 7

Возможно неправильно выражаюсь. Попробую объяснить по другому. В шаблоне подключено 2 файла:

<script type="text/javascript" src="/js/autocomplete.js"></script>
<script type="text/javascript" src="/js/settings.js"></script>


Cодержимое autocomplete.js:

var autocompleteOptions = {
        minChars: 1,
        delay: 600,
        dataType: 'json', 
        autoFill: true,
        extraParams: {
                country_id: $('#country_id').val()                       
        },
        width: 362,
        parse: function(data) {

        },
        formatItem: function(item) {
                                                 
 
        }           
};


Cодержимое settings.js:

$(function(){
        console.log(autocompleteOptions);
})


И в консоли результат: country_id: undefined;

Если же перенести объявление autocompleteOptions в файл settings.js, то все нормально.
Как быть?
Ответить с цитированием
  #7 (permalink)  
Старый 01.09.2011, 20:29
Аватар для walik
Профессор
Отправить личное сообщение для walik Посмотреть профиль Найти все сообщения от walik
 
Регистрация: 09.11.2009
Сообщений: 1,101

Так вы же не ждете загрузки DOM. При вызове $('#country_id').val() элемента еще нет на странице.

$(function() {
    autocompleteOptions = {
        minChars: 1,
        delay: 600,
        dataType: 'json',
        autoFill: true,
        extraParams: {
                country_id: $('#country_id').val()                      
        },
        width: 362,
        parse: function(data) {
 
        },
        formatItem: function(item) {
                                                  
  
        }          
    };
});
__________________
"Всегда пишите код так, будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете."
Мой сертификат :-D клацай
Ответить с цитированием
  #8 (permalink)  
Старый 01.09.2011, 20:32
rwr rwr вне форума
Новичок на форуме
Отправить личное сообщение для rwr Посмотреть профиль Найти все сообщения от rwr
 
Регистрация: 30.08.2011
Сообщений: 7

walik, тогда получаю ошибку. Так как область действия autocompleteOptions, ограничена функцией, определенной в autocomplete.js

autocompleteOptions is not defined
[Прерывать на этой ошибке] console.log(autocompleteOptions);
Ответить с цитированием
  #9 (permalink)  
Старый 01.09.2011, 20:52
rwr rwr вне форума
Новичок на форуме
Отправить личное сообщение для rwr Посмотреть профиль Найти все сообщения от rwr
 
Регистрация: 30.08.2011
Сообщений: 7

Black_Prince, спасибо. Ваш вариант, сработал.
Ответить с цитированием
  #10 (permalink)  
Старый 01.09.2011, 20:55
Аватар для walik
Профессор
Отправить личное сообщение для walik Посмотреть профиль Найти все сообщения от walik
 
Регистрация: 09.11.2009
Сообщений: 1,101

К переменной обращаетесь тоже после загрузки DOM когда уже переменная объявлена ?

+ обратите внимание что в моем примере я объявил переменную без слова var что бы она была глобальная.
__________________
"Всегда пишите код так, будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете."
Мой сертификат :-D клацай
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как правильно подавить событие при подключении своего обработчика? Маэстро Firefox/Mozilla 2 03.09.2011 11:46
Как правильно задать условие:? dididima Общие вопросы Javascript 1 03.08.2011 01:11
как правильно обратится к iframe? uznik73 Events/DOM/Window 1 16.07.2011 14:35
Как правильно очистить maxlength в input? Маэстро Events/DOM/Window 10 22.06.2011 18:14
Как правильно оформить Send() Алекс97 AJAX и COMET 20 30.10.2008 19:19