Para não precisar ficar replicando o mesmo codigo em varios arquivos e até em mais de um lugar do mesmo arquivo eu transformei a minha função que renderizava produtos no obj literal abaixo.
produtoObj = function() {
return {
titulo: response.produto[i].dados.nome,
preco: parseFloat(response.produto[i].dados.por),
parcela: parseFloat(response.produto[i].dados.qtdParcela),
valorParcela: parseFloat(response.produto[i].dados.por) / parseFloat(response.produto[0].dados.qtdParcela).toFixed(2),
classe : response.produto[i].dados.id,
imagem : produtos[i].dados.imgNome,
renderiza: function () {
var tagFig = "<piicture>" + "</piicture>";
var tagPicture = $(tagFig).attr("class", "produtos-organizados a" + this.classe);
var tagTituloProduto = "<figcaption>" + this.titulo + "</figcaption>";
var tagPreco = "<p>" + "R$ " + this.preco + "</p>";
var parcela = this.parcela;
var converteTotal = this.valorParcela;
var tagParcela = "<p>" + "at\u00e9 " + this.parcela + "x" + " de " + converteTotal + "</p>";
var tagDiv = "<div>" + "</div>";
var divP = $(tagDiv).append(tagPreco, tagParcela);
var btnId = "<i class='large material-icons' id='response.produto[0].dados.id'>" + "shopping_cart" + "</i>";
var test = "<img src='img/produtos/" + this.imagem + ".jpg' />";
var teste = $('.produtos');
var add1 = $(tagPicture).append(test, tagTituloProduto, divP, btnId);
var add2 = $(teste).append(add1);
}
};
};
Mas depois que fiz isso comecei a ter problemas ao tanto ao tentar carregar mais produtos, quanto para utilizar o “.sort” em uma outra parte do codigo, e ao invés de renderizar os produtos normalmente ao chamar carregar mais produtos, e chamar o renderizaData, renderizaMaiorPreco ou renderizaMenorPreco (as funções que recebem o “.sort”) sempre é chamado os mesmos valores do meu json.
$(".add-produtos").on("click", function(){
for(var i = 7; i < 9; i++) {
var testar = produtoObj();
testar.renderiza();
};
$('.carregar').removeClass("add-produtos"); //tentativa de limitar o numero de vezes que é possivel chamar a função de adicionar os produtos.
});
Acima o codigo que carrega mais produtos, e abaixo a que reorganiza os produtos
function ordenarData() {
$("#mais-recente").on("click", function(){
remover();
renderizaProdutoPorData();
});
function renderizaProdutoPorData(){
var response = JSON.parse(produto.responseText);
var produtos = response.produto;
produtos.sort(compareData);
for(var i = 0; i < 6; i++) {
var testar = produtoObj();
testar.renderiza();
}
$(".carregar").on("click", function(){
for(var i = 7; i< 10; i++) {
var testar = produtoObj();
testar.renderiza();
};
})
}
function remover(){
$(".produtos-organizados").remove();
};
};
function compareData(a, b) {
return (a.dados.data) < (b.dados.data);
}