Использование jQuery может быть хитрым иногда, обычно, обычно, когда код не следует никакого беспокойства. Эти случаи часто связаны с плохим пониманием обещаний JavaScript и обратных вызовов. И не редко видеть файл сценария с тоннами ajax вызовы, передавая те же параметры, изменяющие только URL.
В качестве возможного обходного пути я предложил сделать разделенные классы, которые удерживают вызовы AJAX, используя M из MVC Frameworks, JS моделей.
Итак, давайте начнем с инкапселяции вызовов AJAX. Я в конечном итоге с этим скриптом, но вы можете изменить для чего-то, что работает для вас.
class Api {
static request(url, promise, formData, method) {
if (promise)
return $.ajax({
url: url,
dataType: 'json',
method: method,
data: formData
})
else
$.ajax({
url: url,
dataType: 'json',
method: 'POST',
data: formData
})
}
}
Далее, давайте сделаем немного шаблона для оказания наших предметов.
var PostTemplates = {
listItem:'%(title)s
Использование идеи модели позволяет создать класс, который централизовать вызовы AJAX, связанные с этим объектом
class Post {
constructor(postInfo) {
this.id = postInfo.id;
this.title = postInfo.title;
}
static getList(){
const url = 'https://jsonplaceholder.typicode.com/posts';
let request = Api.request(url, true, {}, 'GET');
return $.when(request);
}
insert(){
//...
}
remove(){
//...
}
render(item){
return sprintf(PostTemplates.listItem, this)
}
}
И для последних позволяет использовать модель, вызывая функцию GetList
Post.getList().then(function(posts){
let rootElement = $("#banner-message");
rootElement.empty();
$.each(posts, function(index, postInfo){
rootElement.append(new Post(postInfo).render());
})
})
Мой последний пост упоминал чистые JS и теперь jQuery. Это потому, что я замедляю, чтобы погрузиться в новую структуру JS. Я считаю, что у SPA-приложений есть использование случаев, но я бы не сказал, что это лучший подход для каждого проекта.
Оригинал: “https://dev.to/luciunknown/reducing-spaghetti-code-on-jquery-application-using-model-idea–9ba”