#javascript
Вопрос:
Пытаюсь следить за некоторыми видео для моего класса, но я не могу заставить его запустить, это как-то связано .тогда, но я еще не совсем все это понимаю.
Это и то, и другое .затем часть статической надстройки в менеджере классов
Два видео на случай, если это поможет https://www.youtube.com/watch?v=69TMynpJDg8amp;t=326s
https://www.youtube.com/watch?v=e5XkzrR2Et8amp;t=1s
class House {
constructor(name) {
this.name = name;
this.rooms = [];
}
addRoom(name, area) {
this.rooms.push(new Room(name, area));
}
}
class Room {
constructor(name, area) {
this.name = name;
this.area = area;
}
}
class HouseService {
static url = 'https://ancient-taiga-31359.herokuapp.com/api/houses';
static getAllHouses() {
return $.get(this.url);
}
static getHouse(id) {
return $.get(this.url `/${id}`);
}
static createHouse(house) {
return $.post(this.url, house);
}
static updateHouse(house) {
return $.ajax({
url: this.url `/${house._id}`,
dataType: 'json',
data: JSON.stringify(house),
contentType: 'application/json',
type: 'PUT'
})
}
static deleteHouse(id) {
return $.ajax({
url: this.url `/${id}`,
type: 'DELETE'
});
}
}
class DOMManager {
static houses;
static getAllHouses() {
HouseService.getAllHouses().then(houses => this.render(houses));
}
static createHouse(name) {
HouseService.createHouse(new House(name))
.then(() => {
return HouseService.getAllHouses();
})
.then((houses) => this.render(houses));
}
static deleteHouse(id) {
console.log(id)
HouseService.deleteHouse(id)
.then(() => {
return HouseService.getAllHouses();
})
.then((houses) => this.render(houses));
}
static addRoom(id) {
for (let house of this.houses) {
if (house._id == id) {
house.rooms.push(new Room($(`#${house._id}-room-name`).val(), $(`#${house._id}-room-area`).val()))
HouseService.updateHouse(house)
//THIS THEN IS THE ISSUE
.then(() => {
console.log('Hello4' id)
return HouseService.getAllHouses();
})
console.log('Hello5')
.then((houses) => this.render(houses));
}
}
}
static deleteRoom(houseId, roomId) {
for (let house of this.houses) {
if (house._id == houseId) {
for (let room of house.rooms) {
if (room._id == roomId) {
house.rooms.splice(house.room.indexOf(room), 1);
HouseService.updateHouse(house)
.then(() => {
return HouseService.getAllHouses();
})
.then((houses) => this.render(houses));
}
}
}
}
}
static render(houses) {
this.houses = houses;
$('#app').empty();
for (let house of houses) {
$('#app').prepend(
`<div id="${house._id}" class="card">
<div class="card-header">
<h2>${house.name}</h2>
<button class="btn btn-danger" onclick="DOMManager.deleteHouse('${house._id}')">Delete</button>
</div>
<div
<div class="card">
<div class="row">
<div class="col-sm">
<input type="text" id="${house._id}-room-name" class="form-control" placeholder="Room Name">
</div>
<div class="col-sm">
<input type="text" id="${house._id}-room-area" class="form-control" placeholder="Room Area">
</div>
</div>
<button id="${house._id}-new-room" onclick="DOMManager.addRoom('${house._id}')" class="btn btn-primary form-control">Add</button>
</div>
</div>
</div><br>`
);
for (let room of house.rooms) {
$(`#${house._id}`).find('.card-body').append(
`<p>
<span id="name-${room._id}"><strong>Name: </strong> ${room.name}</span>
<span id="area-${room._id}"><strong>Area: </strong> ${room.area}</span>
<button class="btn btn-danger" onclick="DOMManager.deleteRoom('${house._id}', '${room._id}')">Delete Rooms</button>
`
)
}
}
}
}
$('#create-new-house').click(() => {
DOMManager.createHouse($('#new-house-name').val());
$('#new-house-name').val('');
});
DOMManager.getAllHouses();
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>House App</title>
<link rel="stylesheet" href="node_modules/bootstrap/dist/css/bootstrap.css">
</head>
<body class="container">
<div id="new-house" class="jumbotron">
<h2>New House</h2>
<input type="text" id="new-house-name" class="form-control"> <br>
<button id="create-new-house" class="btn btn-primary form-control">Create</button>
</div>
<div id="app">
</div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="index.js"></script>
<script src="node_modules/bootstrap/dist/js/bootstrap.bundle.js"></script>
</body>
</html>
Комментарии:
1. Он исходит от
$.ajax()
возвращаемого объекта.2.
$.ajax()
возвращаетDeferred
объект jQuery. Этот объект совместим с собственнымиPromise
объектами JavaScript, поэтому он реализует.then()
метод.3. Проблема
console.log('Hello5').then((houses) => this.render(houses));
в том, что вы поставилиconsole.log
его не в то место, поэтому вы звоните.then
по нему.4. Что делать, если вы используете асинхронность и ожидаете выдачи, то
5. Консоль. журнал действительно казался проблемой, теперь, когда я запускаю код, я даже не получаю ошибки и ничего не делаю. Это должно быть добавление комнаты в дом.