Как правильно избавляться от дублирования кода?
День добрый.
Есть 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 бороться с таким дублированием. |
Предполагаю что вам следует дождаться загрузки DOM ?
$(function() {
// Тут инициализация вашего плагина
});
|
walik, все верно. Но получается что область видимости переменных станет только как раз инициализация:
$(function() {
});
А мне же нужно, чтобы эти параметры были доступны из других файлов)) |
Так объявляйте переменные как глобальные и все.
|
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) {
}
};
});
|
Возможно неправильно выражаюсь. Попробую объяснить по другому. В шаблоне подключено 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, то все нормально. Как быть? |
Так вы же не ждете загрузки 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) {
}
};
});
|
walik, тогда получаю ошибку. Так как область действия autocompleteOptions, ограничена функцией, определенной в autocomplete.js
autocompleteOptions is not defined [Прерывать на этой ошибке] console.log(autocompleteOptions); |
Black_Prince, спасибо. Ваш вариант, сработал.
|
К переменной обращаетесь тоже после загрузки DOM когда уже переменная объявлена ?
+ обратите внимание что в моем примере я объявил переменную без слова var что бы она была глобальная. |
walik, дико извиняюсь. Упустил этот момент. Спасибо большое!
|
| Часовой пояс GMT +3, время: 02:23. |