Problemas ao utilizar o FLUIGC.loading

Boa tarde,

Estou criando uma Widget e senti a necessidade de colocar um Loading, pois a consulta está demorando mais do que o normal. Tentei seguir o exemplo do fluig style:


// Component construction by setting one div.
var myLoading1 = FLUIGC.loading('#YOUR-SELECTOR');
myLoading1.show();
// We can hide the message of loading
myLoading1.hide();

Porém o exemplo não funcionou de nenhuma maneira.

Então procurei um loading na internet e encontrei o codigo abaixo:



CSS

.overlay {
            background-color: #EFEFEF;
            position: fixed;
            width: 100%;
            height: 100%;
            z-index: 10000000;
            top: 0px;
            left: 0px;
            opacity: .5;
            /* in FireFox /
            filter: alpha(opacity=50);
            / in IE */
        }

        .throbber {
            display: block;
            width: 50px;
            height: 50px;
            margin: -10px;
            padding: 0;
            position: absolute;
            top: 50%;
            left: 50%;
            border: 5px solid;
            border-top-color: transparent;
            border-left-color: transparent;
            border-radius: 50%;
            color: #397CE9;
            background-color: transparent;
            animation: load 0.7s linear infinite;
        }

        @keyframes load {
            100% {
                transform: rotate(360deg);
            }

JS

        function disableScreen() {
            var elemento = document.getElementById("loading");
            elemento.classList.remove('esconder');
        }

        function enableScreen() {
            var elemento = document.getElementById("loading");
            elemento.className += " esconder";
        }

HTML

        <div id="loading" class="overlay esconder">
            <i class="throbber"></i>
        </div>

Testei o codigo no http://codepen.io/pen/ e funcionou tranquilamente.

Porém quando tentei implementar no Widget ele somente aparece no debug.

Alguém já se deparou com esse tipo de comportamento ? ou conseguiu utilizar o FLUIGC.loading ?

EDIT - 10/04/2017

Então acabei percebendo que somente no Chrome não está funcionando o loading, funciona no debug :(

Laércio Lourenço, qual seria a alternativa para mostrar o loading ? Porque estou utilizando dataset no WCM e pelo que eu vi o dataset chama uma função ajax para buscar as informações.

Pensei em ate ficar ouvindo todas as requisições ajax e chamar o loading quando entrar nela:


$(document).ajaxStart(function () {
    $("#loading").show();
});


$(document).ajaxComplete(function () {
    $("#loading").hide();
});

Também somente funciona no debug.

Leandro Souza Tentei implementar o código citado por você e não consegui colocar para executar. Tentei de diversas maneiras:


window.exemple2= FLUIGC.loading();
window.exemple2.show();


var example2= FLUIGC.loading(this.DOM);
example2.show();


var example2= FLUIGC.loading(#MyWidget);
example2.show();

Encontrei uma solução bem simples para o problema. Adicionei essa linha dentro do arquivo javascript que fica no diretorio src/main/webapp/resources/js/seuarquivo.js

Para mostrar o loading:
$(‘loading’).removeClass(‘esconder’);

Para esconder o loading:
$(‘loading’).addClass(‘esconder’);

OBS.: Utilizando o codigo do loading citado na pergunta.

utilizei da seguinte forma.

no init do widget você declara o fluig loading

ex


var exemplo = SuperWidget.extend({

init: function() {

window.exemple 2= FLUIGC.loading();

window.exemple2.show();

}

ai nos demais scripts do widget você utiliza so as chamadas


window.exemple2.show();
window.exemple2.hide();

Bom dia meu caro amigo,

Estava mesmo problema que voce,

Voce esta consumindo dataset's ? como vc esta consumindo eles, via DatasetFactory?

Creio que pelo fato de o DatasetFactory ser assíncrono, ou seja esperando todo o processamento do mesmo para continuar as outras acoes...

Veja essa documentação: http://tdn.totvs.com/pages/releaseview.action?pageId=185739298

Ou seja, recomendo fazer a chamada dos dataset's via REST/Ajax que é Síncrono.. E seu problema possivelmente se resolverá.

Abrass

Lucas, apenas por questão didática, a terminologia que utilizou está invertida. O DatasetFactory trabalha por padrão de forma SÍNCRONA (ou seja o emissor fica aguardando a resposta do receptor).

Utilizando REST/Ajax ou mesmo pela própria DatasetFactory é possível trabalhar de forma assíncrona (passando a função de callback), onde a página/widget não fica ‘travada’ até que o carregamento do dataset seja concluído.

Abs.

Ahh sim sim… Acabei escrevendo de forma contraria… Mas é exatamente conforme você falou… Grato pela correção =D

Utilizo o loading dessa forma e funciona, veja se esse código te ajuda nessa solução.


if(!this.myLoading1)
            this.myLoading1 = FLUIGC.loading("#example");            

        this.myLoading1.show();

        $.get(WCMAPI.serverURL+'/api/public/ecm/dataset/search?datasetId=dsAgendaTelefonica&filterFields=A.ASSESSORIAID,13', function( dados ){

            that.createTable( dados );

        }).fail(function() {

            that.myLoading1.hide();

            sweetAlert("Oops...", "Erro favor contatar o administrador!", "error");

        });

Sei que o POST é meio antigo, mas no meu caso conseguir resolver utilizando o setTimeout, pois o Loading funcionava no Firefox e não funcionava no Chrome, utilizei o seguinte trecho em meu Widget(arquivo.js):


var loadingContratos = FLUIGC.loading('#seletor');

loadingContratos.show();

setTimeout(function(){                     
    execute.BuscaDados();//Busca os dados da tabela
    loadingContratos.hide();//Fecha o Loading após finalizar a busca
},1000);//Tempo em milesegundos(pode aumentar ou diminuir dependendo do caso)

Usar o setTimeout me parece em errado, pois você está obrigando o usuário a esperar 1 segundo mesmo que a ação demore 100ms e no caso de ter algum imprevisto que faça a ação demorar 5 segundos o loading terá desaparecido com 1 segundo. O ideal é ocultar o loading quando realmente terminar o carregamento.