Jonathan and I discussed the benefits of the extra 2 annotations a couple of hours ago.
With the latest changes I just pushed we have the following benefits using our new
approach:
-) Since @DataFields are no longer bound by default (only if marked as @Bound) we no
longer have to tolerate bindings to non-existing properties. A binding to a non-existing
property in errai-ui now fails at compilation/generation time.
-) Using the programmatic data-binding API, we can now throw an exception if a user calls
binder.bind(widget, "non-existing") at runtime.
-) We now support having multiple data binders in a @Templated class, as long as
there's only one @AutoBound data binder.
-) It's a lot easier to understand what's going on by just reading the code.
-) And of course we have a way to specify the property we want to bind to as well as a
converter class (we would have had to add an additional annotation for this anyway).
So, in short I think the extra 2 annotations are justified (at least that's what I
keep telling myself :)).
Cheers,
Christian
On 2012-08-14, at 4:01 PM, Christian Sadilek <csadilek(a)redhat.com> wrote:
This is implemented now.
Here's an example from the errai-ui test suite:
https://github.com/errai/errai/blob/master/errai-ui/src/test/java/org/jbo...
It shows how to use converters and how to bind to alternative properties.
Could you give it a try by adapting your demos and see if you still like the approach
before we document and release it?
Cheers,
Christian
On 2012-08-14, at 3:48 PM, "Lincoln Baxter, III"
<lincolnbaxter(a)gmail.com> wrote:
> Agreed, +1 for @Bound - and someone needs to fix this list to reply-all by default.
I'll try.
>
> On Tue, Aug 14, 2012 at 10:44 AM, Jonathan Fuerth <jfuerth(a)redhat.com> wrote:
> Me too. I understand that @Inject is an imperative verb, but maybe that was a mistake
in a spec we don't control. :)
>
> The good news is that it reads well whether or not @Inject is also present:
>
> @Inject @Bound private TextBox input;
> @Bound private TextBox input = new TextBox("moo");
>
> -Jonathan
>
> PS: sorry for the earlier reply which didn't make it to the list.. I had tried to
respond to the list from an account that isn't subscribed to this list.
> From: "Lincoln Baxter, III" <lincolnbaxter(a)gmail.com>
> To: "Christian Sadilek" <csadilek(a)redhat.com>
> Cc: errai-dev(a)lists.jboss.org, "Mike Brock" <brockm(a)gmail.com>,
"Jonathan Fuerth" <jfuerth(a)gmail.com>
> Sent: Monday, August 13, 2012 1:37:04 PM
> Subject: Re: [errai-dev] Fwd: Errai UI and DataBinding
>
>
> I'm still leaning toward @Bound
>
> On Mon, Aug 13, 2012 at 1:12 PM, Christian Sadilek <csadilek(a)redhat.com>
wrote:
> I agree that AutoBound is better, so the remaining question is just @Bind vs. @Bound
for DataFields?
>
> As adjectives:
>
> @Templated
> public class Thing extends Composite {
>
> @Inject
> @Bound(property="street")
> @DataField
> private TextBox input;
>
> or
>
> @Inject
> @Bind(property="street")
> @DataField
> private TextBox input;
>
> }
>
>
> On 2012-08-13, at 12:54 PM, "Lincoln Baxter, III"
<lincolnbaxter(a)gmail.com> wrote:
>
> I'm voting for adjectives I guess. It's typically the way that CDI Qualifiers
look when functioning with @Inject. Granted, these aren't qualifiers, but they might
as well be by how they behave and actually modify the result of the injection.
>
> I'm 100% sure how I feel about @AutoBound - but I'm not 100% sure about
@Bound.
>
>
> As adjectives:
>
> @Templated
> public class Thing extends Composite {
>
> @Inject
> @Bound
> private TextBox input;
>
> @Inject
> @AutoBound
> private DataBinder<Model> binder;
>
> }
>
>
> As verbs:
>
> @Templated
> public class Thing extends Composite {
>
> @Inject
> @Bind
> private TextBox input;
>
> @Inject
> @AutoBind
> private DataBinder<Model> binder;
>
>
>
> }
>
> On Mon, Aug 13, 2012 at 11:31 AM, Christian Sadilek <csadilek(a)redhat.com>
wrote:
> Had the same thought. It's @Inject, so I thought @Bind would be more consistent
on the data field….but I am fine either way…let's vote :)
>
> On 2012-08-13, at 11:26 AM, "Lincoln Baxter, III"
<lincolnbaxter(a)gmail.com> wrote:
>
> Should it be @Bind or @Bound?
>
> On Mon, Aug 13, 2012 at 10:52 AM, Christian Sadilek
<christian.sadilek(a)gmail.com> wrote:
> just forwarding Lincoln's reply. If there are no objections to @Bind
> and @AutoBound, I will go ahead and implement this later today or
> tomorrow.
>
> cheers,
> christian
>
> ---------- Forwarded message ----------
> From: Lincoln Baxter, III <lincolnbaxter(a)gmail.com>
> Date: Mon, Aug 13, 2012 at 12:05 AM
> Subject: Re: [errai-dev] Errai UI and DataBinding
> To: Christian Sadilek <christian.sadilek(a)gmail.com>
>
>
> I do think we need programmatic control over bindings. I think that
> was one of my first questions when we implemented the @Injected
> databinder. I agree with you that the current state is a bit too
> "magical," and I think that the suggestions you've brough up will help
> to eliminate that.
>
> +1 to individual @Bind and also aggregate @Autobind / @Autobound annotation
>
> ~Lincoln
>
> On Sun, Aug 12, 2012 at 7:53 PM, Christian Sadilek
> <christian.sadilek(a)gmail.com> wrote:
> >
> > Hi,
> >
> > I'd like to propose a change to our DataBinding integration in Errai
> > UI. Basically, I think we should retire the implicit binding approach
> > and introduce a new annotation. So, within a @Templated class that has
> > a DataBinder<T> field, we should have the following options:
> >
> > 1. No binding
> > @Inject @DataField
> > private TextBox date;
> >
> > 2. Binding to model property with matching name
> > @Inject @Bind @DataField
> > private TextBox date;
> >
> > 3. Binding to model property with matching name using provided converter
> > @Inject @Bind(converter=MyDataConverter.class) @DataField
> > private TextBox date;
> >
> > 4. Binding to model property with provided name
> > @Inject @Bind(property="lastUpdated") @DataField
> > private TextBox date;
> >
> > 5. Binding to model property with provided name using provided converter
> > @Inject @Bind(property="lastUpdated",
converter=MyDataConverter.class)
> > @DataField
> > private TextBox date;
> >
> > Additionally, we could add an annotation (e.g. @AutoBind) that when
> > present on the @Templated class causes our current behaviour. All
> > @DataFields will be bound to model properties with matching names.
> >
> > I prefer this approach because just by looking at the code I get all
> > the information I need to undersand what's going on. Our current
> > approach seems a little too magical :).
> >
> > WDYT?
> >
> > Cheers,
> > Christian
> > _______________________________________________
> > errai-dev mailing list
> > errai-dev(a)lists.jboss.org
> >
https://lists.jboss.org/mailman/listinfo/errai-dev
>
>
>
>
> --
> Lincoln Baxter, III
>
http://ocpsoft.org
> "Simpler is better."
> _______________________________________________
> errai-dev mailing list
> errai-dev(a)lists.jboss.org
>
https://lists.jboss.org/mailman/listinfo/errai-dev
>
>
>
> --
> Lincoln Baxter, III
>
http://ocpsoft.org
> "Simpler is better."
> _______________________________________________
> errai-dev mailing list
> errai-dev(a)lists.jboss.org
>
https://lists.jboss.org/mailman/listinfo/errai-dev
>
>
>
>
> --
> Lincoln Baxter, III
>
http://ocpsoft.org
> "Simpler is better."
>
>
>
>
> --
> Lincoln Baxter, III
>
http://ocpsoft.org
> "Simpler is better."
>
> _______________________________________________
> errai-dev mailing list
> errai-dev(a)lists.jboss.org
>
https://lists.jboss.org/mailman/listinfo/errai-dev
>
>
>
>
> --
> Lincoln Baxter, III
>
http://ocpsoft.org
> "Simpler is better."
_______________________________________________
errai-dev mailing list
errai-dev(a)lists.jboss.org
https://lists.jboss.org/mailman/listinfo/errai-dev