 
			
				01.09.2011, 15:58
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Новичок на форуме 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 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 бороться с таким дублированием.  
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				01.09.2011, 16:14
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 09.11.2009 
					
					
					
						Сообщений: 1,101
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		Предполагаю что вам следует дождаться загрузки DOM ? 
$(function() {
   // Тут инициализация вашего плагина
});
 
		
	
		
		
		
		
		
			
				__________________ 
				"Всегда пишите код так, будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете."   
Мой сертификат :-D клацай
			 
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				01.09.2011, 16:25
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Новичок на форуме 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 30.08.2011 
					
					
					
						Сообщений: 7
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		walik, все верно. Но получается что область видимости переменных станет только как раз инициализация: 
$(function() {
   
});
А мне же нужно, чтобы эти параметры были доступны из других файлов))  
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				01.09.2011, 19:08
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 09.11.2009 
					
					
					
						Сообщений: 1,101
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
		
		
		 Так объявляйте переменные как глобальные и все. 
		
	
		
		
		
		
		
			
				__________________ 
				"Всегда пишите код так, будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете."   
Мой сертификат :-D клацай
			 
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				01.09.2011, 20:11
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Аспирант 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 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) {
                                                 
 
        }
              
    };
});
 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				01.09.2011, 20:26
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Новичок на форуме 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 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, то все нормально.  
Как быть?  
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				01.09.2011, 20:29
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 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 клацай
			 
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				01.09.2011, 20:32
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Новичок на форуме 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 30.08.2011 
					
					
					
						Сообщений: 7
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
		
		
		 walik, тогда получаю ошибку. Так как область действия autocompleteOptions, ограничена функцией, определенной в autocomplete.js  
 
autocompleteOptions is not defined 
[Прерывать на этой ошибке] console.log(autocompleteOptions); 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				01.09.2011, 20:52
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Новичок на форуме 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 30.08.2011 
					
					
					
						Сообщений: 7
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
		
		
		 Black_Prince, спасибо. Ваш вариант, сработал. 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				01.09.2011, 20:55
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 09.11.2009 
					
					
					
						Сообщений: 1,101
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
		
		
		 К переменной обращаетесь тоже после загрузки DOM когда уже переменная объявлена ? 
 
+ обратите внимание что в моем примере я объявил переменную без слова var что бы она была глобальная. 
		
	
		
		
		
		
		
			
				__________________ 
				"Всегда пишите код так, будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете."   
Мой сертификат :-D клацай
			 
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
 
 |  
  |