2
respostas

Pegar referencia para chamar uma função

    export class EvaluationController {
    constructor(){
        let $ = document.querySelector.bind(document);
        this._tab       = $(".nav-tabs");
        this._content   = $(".tab-content");

        this._view      = new EvaluationView(this._tab,this._content);

        this._ListEvaluations = new Bind(
            new ListEvaluations(),
            this._view,
            this._reloadEvents,
            "add","remove");
    }

    add(){
        this._ListEvaluations.add(this._newEvaluation());
        Alerts.add();
    }
    _newEvaluation(){
        return new Evaluation("Nova seção",(this._ListEvaluations.evaluations.length+1),new CompetenceController((this._ListEvaluations.evaluations.length+1)))
    }

    remove(element){
        Alerts.remove(() =>
            this._ListEvaluations
            .remove(element.target.getAttribute("index")));
    }


    _reloadEvents(list){
        list.evaluations.map((e) => {
        let object_div = document.querySelector("#competence_"+e._index);

            $("#deleteEvaluation_"+e.index)
                .on("click",(element) => {
                    list.remove(element.target.getAttribute("index"));
            });

            $("#addCompetence_"+e.index)
                .on("click",(element) => {
                    list.addCompetence(element.target.getAttribute("index"),object_div);
                });
        });
    }
}

tenho a seguinte classe, a ListEvaluations é monitorada em um proxy para toda vez que ocorrer a ação refazer o conteudo da aplicação. O método remove está monitorado pelo proxy, porém o botão que executa esta ação é gerado dinamicamente. Como faço a referencia do método remove da classe Evaluation Controller com o botão gerado dinamicamente?

2 respostas

Oi Guilherme, tudo bom? Se o botão é gerado dinâmicamente, talvez adicionar o evento direto no botão não seja uma boa, você poderia fazer o evento funcionar por meio de Event Delegation, se aproveitando do bubbling dos eventos do JavaScrpt:

http://desenvolvimentoparaweb.com/javascript/delegacao-de-evento-event-delegation-javascript/

então, eu chego a delegar um evento que está na classe ListEvaluations, porém por estar recebendo a lista do diretamente do proxy, quando este botão executava o evento, ele não recarrega os dados da view

tecnicamente eu teria que apontar o evento remove da propria classe, porém ele perde a referencia e tenho que chamar o evento que se encontra na classe ListEvaluations