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 клацай
|
|
|
|