Estou com problemas no item 3 da aula 3. Fiz todo o código como está no vídeo, porém não estou conseguindo obter o resultado. Minhas mensagens não aparecem corretamente de acordo com a ação que fiz. A primeira nunca vai, às vezes aparece "Adicionado com sucesso" quando apago e "Apagado com sucesso" quando adiciono. Alguma sugestão?
NegociacaoController.js
class NegociacaoController {
constructor() {
let $ = document.querySelector.bind(document);
// A chamada dentro de um construtor para os input's evita percorrer o DOM várias vezes
this._inputData = $('#data');
this._inputQuantidade = $('#quantidade');
this._inputValor = $('#valor');
this._negociacoesView = new NegociacoesView($('#negociacoesView'));
this._listaNegociacoes = new Bind(
new ListaNegociacoes(),
this._negociacoesView,
['adiciona', 'esvazia']
);
this._mensagemView = new MensagemView($('#mensagemView'));
this._mensagem = new Bind(
new Mensagem(),
this._mensagemView,
['texto']
);
}
adiciona(event) {
event.preventDefault();
this._listaNegociacoes.adiciona(this._criaNegociacao());
this._mensagem.texto = 'Negociação adicionada com sucesso';
this._limpaFormulario();
}
apaga() {
this._listaNegociacoes.esvazia();
this._mensagem.texto = 'Negociações apagadas com sucesso!';
}
_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();
}
}
Bind.js
class Bind{
constructor(model, view, props){
let proxy = ProxyFactory.create(
model,
props,
model => view.update(model)
);
view.update(model);
return proxy;
}
}
ProxyFactory.js
class ProxyFactory {
static create(objeto, props, acao) {
return new Proxy(objeto, {
get(target, prop, receiver) {
if (props.includes(prop) && ProxyFactory._ehFuncao(target[prop])) {
return function () {
console.log(`interceptando ${prop}`);
Reflect.apply(target[prop], target, arguments);
return acao(target);
}
}
return Reflect.get(target, prop, receiver);
},
set(target, prop, value, receiver){
if(props.includes(prop)){
acao(target);
}
return Reflect.set(target, prop, value, receiver);
}
});
}
static _ehFuncao(func){
return typeof (func) == typeof(Function);
}
}