[
https://issues.apache.org/jira/browse/THRIFT-3122?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14541435#comment-14541435
]
ASF GitHub Bot commented on THRIFT-3122:
----------------------------------------
Github user henrique commented on the pull request:
https://github.com/apache/thrift/pull/476#issuecomment-101528449
1. e.g. lib/js/test/deep-constructor.test.js ? If you have the time it will
be perfect.
2. Yes, we have this duplication but at least it would be only loaded once,
in case there are multiple services. An alternative would be to add a compiler
option in t_js_generator.cc
> 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)