Ir para conteúdo


Foto

[RESOLVIDO] Problema ao usar transform no Writer: RangeError: Maximum call stack size exceed


  • Por favor, faça o login para responder
6 respostas neste tópico

#1 linyatis

linyatis

    Member Avançado

  • Membros
  • PipPipPip
  • 94 posts
  • LocationPiracicaba, SP

Postado 16 September 2014 - 13:01

Olá pessoal. Acredito que encontrei um bug no ExtJS 5.

A classe Ext.data.writer.Json possui uma função chamada transform que pode ser utilizada para fazer alguma alteração no dado que será enviado.
Ext.data.writer.Json.transform

Se meu writer estiver como abaixo, tudo funciona normal:
writer: {
       type: 'json',
       transform: function (data) {
            console.log('Sent data: ', data);
            return data;
       }
}

Porém eu quero utilizar o rootProperty para definir o nome do objeto que é enviado como json:

    writer: {
        type: 'json',
        rootProperty: 'user',
        transform: function (data) {
            console.log('Sent data: ', data);
            return data;
        }
    }

Desta forma ele acusa a exception RangeError: Maximum call stack size exceeded.

Quem quiser conferir, coloquei o exemplo Sencha Fiddle:
https://fiddle.sencha.com/#fiddle/aee

Conforme coloco no Fiddle, para mim não serve enviar o dado com encode, pois ele anexa o objeto à url. Quero que meu objeto vá no Request Payload, como esperado para um POST/PUT.
José Filipe Lyra
Desenvolvedor Java

#2 linyatis

linyatis

    Member Avançado

  • Membros
  • PipPipPip
  • 94 posts
  • LocationPiracicaba, SP

Postado 16 September 2014 - 13:43

Se mais alguém tiver esse problema ou quiser acompanhar, abri uma thread lá no fórum da Sencha:
http://www.sencha.co...call-stack-size)&p=1066039#post1066039
José Filipe Lyra
Desenvolvedor Java

#3 lc.brito

lc.brito

    Member Avançado

  • Membros
  • PipPipPip
  • 47 posts

Postado 16 September 2014 - 13:58

Olá linyatis,

Algumas coisas que não entendi:

1ª Você criou uma classe com Ext.define, mas o seu extend aponta para Ext.data.Model e não para Ext.data.Store
2ª Tanto na documentação do Ext JS 4 e 5 não existe a propriedade rootProperty, mas no meu caso que uso o Ext JS 4, defino a propriedade como root apenas, pois este será o nome do JSON com os dados que deverão ser lidos pela sua linguagem de back-end
3ª Você não definiu a propriedade api, onde colocamos as urls (create, read, update, destroy)
4ª E nem definiu a propriedade reader para saber com o dado será enviado pelo servidor para sua aplicação Ext JS

#4 linyatis

linyatis

    Member Avançado

  • Membros
  • PipPipPip
  • 94 posts
  • LocationPiracicaba, SP

Postado 16 September 2014 - 14:10

Olá, lc.brito!

1ª Você criou uma classe com Ext.define, mas o seu extend aponta para Ext.data.Model e não para Ext.data.Store

Sim, o extend aponta para o Ext.data.Model. Tanto o model quanto o store possuem o proxy. Aliás o store pode utilizar o proxy definido no model. Quando definido proxy no store, este sobreescreve o do model. Essa maneira de escrever já existia no 4 também  :)

2ª Tanto na documentação do Ext JS 4 e 5 não existe a propriedade rootProperty, mas no meu caso que uso o Ext JS 4, defino a propriedade como root apenas, pois este será o nome do JSON com os dados que deverão ser lidos pela sua linguagem de back-end

No 4 se chamava apenas root, mas no 5 ela foi refatorada e virou rootProperty para seguir o padrão adotado pela Sencha, como pode ver no link abaixo:
http://docs.sencha.c...fg-rootProperty

3ª Você não definiu a propriedade api, onde colocamos as urls (create, read, update, destroy)

Estou utilizando "rest", portanto não preciso definir o api.
http://docs.sencha.c...data.proxy.Rest

4ª E nem definiu a propriedade reader para saber com o dado será enviado pelo servidor para sua aplicação Ext JS

Não defini a propriedade reader pois não estou lendo nada do servidor neste exemplo, apenas quero enviar algo para o servidor.  ;)
José Filipe Lyra
Desenvolvedor Java

#5 lc.brito

lc.brito

    Member Avançado

  • Membros
  • PipPipPip
  • 47 posts

Postado 16 September 2014 - 14:21

Olá linyatis,

Entendi, muito interessante, então pelo que você disse você precisa definir na store:

        actionMethods: {
            create: 'POST',
            read: 'GET',
            update: 'PUT',
            destroy: 'DELETE'
        }

Seria necessário isso?

#6 linyatis

linyatis

    Member Avançado

  • Membros
  • PipPipPip
  • 94 posts
  • LocationPiracicaba, SP

Postado 16 September 2014 - 14:27

Não precisa colocar nada disso.

Se vc olhar a classe Ext.data.proxy.Rest vai ver que os métodos já estão definidos por padrão.
http://docs.sencha.c...data-proxy-Rest

defaultActionMethods: {
        create : 'POST',
        read   : 'GET',
        update : 'PUT',
        destroy: 'DELETE' 
    },

José Filipe Lyra
Desenvolvedor Java

#7 linyatis

linyatis

    Member Avançado

  • Membros
  • PipPipPip
  • 94 posts
  • LocationPiracicaba, SP

Postado 17 September 2014 - 14:48

Pessoal,

Sencha informou que isto realmente é um bug que já foi corrigido e deverá sair na próxima release do ExtJS 5.

http://www.sencha.co...call-stack-size)
José Filipe Lyra
Desenvolvedor Java




0 usuário(s) está(ão) lendo este tópico

0 membros, 0 visitantes, 0 membros anônimos