[ 
https://issues.apache.org/jira/browse/THRIFT-3122?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14542492#comment-14542492
 ] 

ASF GitHub Bot commented on THRIFT-3122:
----------------------------------------

Github user henrique commented on the pull request:

    https://github.com/apache/thrift/pull/476#issuecomment-101781028
  
    
            e.g. lib/js/test/deep-constructor.test.js ?
    
        So more duplication, except it also needs to be rewritten for the 
different test runner js uses
    
    It looks like we are going nowhere here, but yes they are two different 
libraries and need to be tested twice; I don't mind how. If you have another 
idea just let us know.
    
            An alternative would be to add a compiler option in 
t_js_generator.cc
    
        What would the option do?
    
    I meant to make these changes (THRIFT-3122) optional. e.g thrift --gen 
js:jquery --gen node:convert-plain. But this is not a requirement.


> Javascript struct constructor should properly initialize struct and container 
> members from plain js arguments
> -------------------------------------------------------------------------------------------------------------
>
>                 Key: THRIFT-3122
>                 URL: https://issues.apache.org/jira/browse/THRIFT-3122
>             Project: Thrift
>          Issue Type: Improvement
>          Components: JavaScript - Compiler
>            Reporter: Igor Tkach
>
> Currently constructors for struct types in generated javascript accept 
> {{args}} object and initialize struct's members by simply assigning a value 
> from corresponding {{args}} object property (if not undefined). If struct 
> member is
> another struct it must be explicitly created with constructor and passed as 
> an argument value.
> Given following definitions:
> {code}
> struct A {
>        1: string something
> }
> struct B {
>        1: A value
> }
> {code}
> this works:
> {code:javascript}
> var b1 = new B(
>   {
>     value: new A(
>       {
>         something: 'hello'
>       }
>     )
>   }
> );
> {code}
> this doesn't:
> {code:javascript}
> var b2 = new B(
>   {
>     value: {
>       something: 'hello'
>     }
>   }
> );
> {code}
> Attempt to serialize b2 will result in error because {{b2.a}} doesn't have a 
> {{write}} method.
> This becomes especially problematic when deep objects are used with libraries 
> like [Underscore.js|http://underscorejs.org/], [lodash|https://lodash.com/], 
> [React's immutability 
> helpers|https://facebook.github.io/react/docs/update.html] or 
> [Immutable.js|https://github.com/facebook/immutable-js]: most operations will 
> return or produce plain javascript objects without read/write methods even if 
> Thrift objects were given as input. Manually converting object graphs back to 
> Thrift serializable form is not workable.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to