Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Meu Ajax não está removendo os Itens do carrinho quando o valor fica igual a 0

Todas outras funções estão funcionando ok, porem a parte de remoção de item só funciona quando atualizo a pagina.

Segue abaixo todo meu codigo java script

Outro comportamento estranho, é que no trecho : Se eu " if (response.itemPedido.quantidade == 0", o visual studio reclama dizendo que precisa ser " if (response.itemPedido.quantidade === 0"

 if (response.itemPedido.quantidade < 1) {
                this.removeItem(response.itemPedido);
            }
class Carrinho {

    clickIncremento(btn) {
        var data = this.getData(btn);
        data.Quantidade++;
        this.postQuantidade(data);
    }

    clickDecremento(btn) {
        var data = this.getData(btn)
        data.Quantidade--;
        this.postQuantidade(data);
    }

    updateQuantidate(input) {
        var data = this.getData(input);
        this.postQuantidade(data);
    }

    getData(elemento) {
        var linhaDoItem = $(elemento).parents('[item-id]');
        var itemId = linhaDoItem.attr('item-id');
        var qtde = linhaDoItem.find('input').val();

        return  {
            Id: itemId,
            Quantidade: qtde
        };
    }
    postQuantidade(data) {
        $.ajax({
            url: '/pedido/PostQuantidade',
            type: 'POST',
            contentType: 'application/json',
            data: JSON.stringify(data)
        }).done(function (response) {
            this.setQuantidade(response.itemPedido);
            this.setSubtotal(response.itemPedido);
            this.setTotal(response.carrinhoViewModel);
            this.setNumeroItens(response.carrinhoViewModel);
            if (response.itemPedido.quantidade < 1) {
                this.removeItem(response.itemPedido);
            }

        }.bind(this));
    }


    setQuantidade(itemPedido) {
             this.getLinhaDoItem(itemPedido)
            .find('input').val(itemPedido.quantidade);
    }

    setSubtotal(itemPedido) {
        this.getLinhaDoItem(itemPedido)
            .find('[subtotal]').html(itemPedido.subtotal.duasCasas());

    }

    setTotal(carrinhoViewModel) {
            $('[total]').html(carrinhoViewModel.total.duasCasas());
    }
    getLinhaDoItem(itemPedido) {
      return  $('[item-id=' + itemPedido.id + ']')
    }
    removeItem(itemPedido) {
        this.getLinhaDoItem(itemPedido).remove();
    }
    setNumeroItens(carrinhoViewModel) {
        var texto =
            'Total: '
            + carrinhoViewModel.itens.lenght
            + ' '
            + (carrinhoViewModel.intens.lenght > 1 ? 'itens' : 'Item');
        $('[numero-itens]').html(texto);
    }
}

Number.prototype.duasCasas = function () {
    return this.toFixed(2).replace('.', ',');
}

var carrinho = new Carrinho();
2 respostas
solução!

Consegui resolver o problema :

 postQuantidade(data) {
        $.ajax({
            url: '/pedido/PostQuantidade',
            type: 'POST',
            contentType: 'application/json',
            data: JSON.stringify(data)
        }).done(function (response) {
            this.setQuantidade(response.itemPedido);
            this.setSubtotal(response.itemPedido);
            this.setTotal(response.carrinhoViewModel);
            this.setNumeroItens(response.carrinhoViewModel);
            if (response.itemPedido.quantidade < 1) {
                this.removeItem(response.itemPedido);
            }

        }.bind(this));
    }

A parte do if estava vindo antes do :

this.setNumeroItens(response.carrinhoViewModel);, ou seja, ele não estava impondo a condição para o total de itens do carrinho.

Boa Felipe,

Obrigado por compartilhar a solução com a gente =)

Qualquer problema é só falar.

Abraço!