#javascript #stimulusjs
#javascript #stimulusjs
Вопрос:
Я новичок в JavaScript и, вероятно, пытаюсь эмулировать Ruby с помощью этого. Я использую StimulusJS, но я думаю, что вопрос применим к JS в целом.
Моя цель — запустить метод (при нажатии кнопки), который будет извлекать и отображать все подкатегории категории с помощью кнопки. Метод / функция сначала извлекает данные, а затем управляет DOM. Я хотел разделить их на два метода, но когда я вызываю другой метод ( displaySubcategories
) из первого ( getSubcategories
), значение event
изменяется. То же самое с this
in the fetch
block — мне нужно сначала назначить ее self
, чтобы позже можно было связать с самим объектом.
Есть ли лучший способ сделать это? Как переменные, доступные для всех методов (переменные экземпляра в Ruby)? Или я вообще не должен разделять их на две функции (не JS way)?
import {Controller} from "stimulus"
export default class extends Controller {
static targets = ["categoryId", "categoryLabel", "subcategoryList", "subcategoryHeader"]
getSubcategories() {
let category_id = event.target.firstElementChild.value
let url = "/api/categories/" category_id "/subcategories?levels=1"
let self = this
let e = event
fetch(url)
.then(response => response.json())
.then(json_response => {
self.displaySubcategories(json_response, e)
})
}
displaySubcategories(json_response, event) {
subcategories.forEach(function (subcategory) {
let category_label_copy = this.cloneLabel(current_label, subcategory)
current_label.classList.add("chosen")
subcategory_list.appendChild(category_label_copy)
}, this)
}
}
расходы#getSubcategories»>
Комментарии:
1. Это
getSubcategories
метод объекта или независимая функция? Если первое, не могли бы вы показать весь соответствующий код?2. Это метод объекта. Есть только второй метод (
displaySubcategories
), который еще не готов, так как я перестал думать о том, как мне его структурировать. Однако это общий вопрос — если я хочу использоватьevent
— нужно ли мне передавать его из метода в метод? Доступна ли она только в первом вызванном методе и не может быть назначена какой-либо переменной, доступной также из других методов?3. Я просто хочу более подробно изучить ваш объект. Является ли она экземпляром класса или создается с помощью объектного литерала?
4. И КСТАТИ, поскольку вы используете функции со стрелками, у вас не должно возникнуть проблем с
this
ключевым словом, нет необходимости хранить его в другой переменной (self
в вашем случае)5.
this.foobar = 1
— это присваивание значения «переменной экземпляра» (когда внутри нестатического метода класса), в чем проблема? Вам нужно прочитать об анатомии классов в JavaScript. Кроме того, я комментирую, потому что мои комментарии не являются ответом на ваш вопрос, поскольку я нахожу ваш вопрос расплывчатым и / или субъективным (однозначного ответа нет). Если вы уточните, что вам нужно, в вопросе, возможно, кто-то, включая меня, может дать достойный ответ.