Oi pessoal. Não estou conseguindo compreender a lógica da criação do array instanciado na classe ListaNegociacoes.
Na minha cabeça, o que está acontecendo é o seguinte: Cada instancia da classe NegociacaoController cria uma nova instância da classe ListaNegociacoes. Então para mim o que deveria acontecer na lógica é que cada negociação adicionada acabaria criando um novo objeto da ListaNegociacoes, virando um array separado. Porém o que acontece é a criação de um único array, que vai recebendo os push's de cada nova negociação. Por que isso está funcionando?
EDIT: Acho que entendi mais ou menos. Lá no index a variável negociacaoController está recebendo um novo objeto NegociacaoController, e depois a variável está sendo chamada pelo form para executar a função adiciona(event). Por isso, o objeto está sendo criado apenas uma vez, e cada vez que envio o form, ele atualiza os valores das propriedades e manda para dentro do array. É isso? Nesse caso, com um formulário eu posso ficar utilizando apenas uma instância do controller para ir adicionando as negociações.
Arquivo NegociacaoController:
class NegociacaoController {
constructor() {
// coletando os dados com construtor para varrer o DOM uma só vez
let $ = document.querySelector.bind(document);
this._inputData = $('#data');
this._inputQuantidade = $('#quantidade');
this._inputValor = $('#valor');
this._listaNegociacoes = new ListaNegociacoes();
}
adiciona(event) {
//evitando que o botao de refresh na pagina
event.preventDefault();
this._listaNegociacoes.adiciona(this._criaNegociacao());
this._limpaFormulario();
console.log(this._listaNegociacoes.negociacoes);
}
_criaNegociacao() {
return new Negociacao(
DateHelper.textoParaData(this._inputData.value),
this._inputQuantidade.value,
this._inputValor.value);
}
_limpaFormulario() {
this._inputData.value = '';
this._inputQuantidade.value = 1;
this._inputValor.value = 0.0;
this._inputData.focus();
}
}
Arquivo ListaNegociacoes
class ListaNegociacoes {
constructor() {
this._negociacoes = [];
}
adiciona(negociacao) {
this._negociacoes.push(negociacao);
}
get negociacoes() {
return this._negociacoes;
}
}