• Open Menu Close Menu
  • Apple
  • Shopping Bag
  • Apple
  • Mac
  • iPad
  • iPhone
  • Watch
  • TV
  • Music
  • Support
  • Search apple.com
  • Shopping Bag

Lists

Open Menu Close Menu
  • Terms and Conditions
  • Lists hosted on this site
  • Email the Postmaster
  • Tips for posting to public mailing lists
Re: Components binding with custom object
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Components binding with custom object


  • Subject: Re: Components binding with custom object
  • From: Samuel Pelletier <email@hidden>
  • Date: Tue, 02 Jun 2015 10:17:03 -0400

Hi,

Usually, I use WOSwitchComponent for an editor component used for an entity with subclasses. The switch is based on the object real entity to select the right editor component.

With WOSwitchComponent, there are 2 things to ensure: 

1- Binding required for the used components are common to all of them.

2- Make sure the the component used by the WOSwitchComponent does not change between two responses, breaking this rule is easy and produce very nasty results. i.e. it should change only during appendToResponse. (Same rule for WORepetition list...)


For surrounding contents commun to multiple pages, a PageWrapper using the WOComponentContent is a better pattern, I often even stack them. A main page wrapper for the application and a specialized one for admin sections or visitor pages that will include the main one.

WOComponentContent indicate to place the content between the parent <WEBOBJECT> and </WEBOBJECT> tags. It is a reverse inclusion to add content around us !


Samuel


Le 2015-06-02 à 07:43, HOUNKPONOU Ronald <email@hidden> a écrit :

Hi everyone,
Actually, i think all my pages (managed by woswitch) will have the same binding.
I am now implementing the woswitching and it seems to work fine for the moment.
The one thing i am having problem with is the menu on which user will click to trigger
the component switch.

Trying to use AjaxUpdateLink for the first time.

Thank you all for your contributions.

Ronald.



2015-06-02 1:00 GMT+01:00 Timothy Worman <email@hidden>:
+1

As is, WOSwitchComponent expects all child switched components to take the same bindings. It can be a pretty surly limitation. If your subcomponents take the same binding(s) then WOSwitchComponent works pretty great.

For “fun,” I created a set of interfaces (one each, for the base page with the switch component, and the switched component) which, when implemented, enforces an api where you can pass custom bindings. Then I can pass a single dictionary of bindings.

Works fine, but I’m not sure the cure was better than the disease!

Tim Worman
UCLA GSE&IS


> On Jun 1, 2015, at 8:03 AM, Jean-François Veillette <email@hidden> wrote:
>
> I can’t remember exactly.  It was solved a long time ago.
> All I can remember is that it was somehow related to instance not having expected binding / ivars values.
>
> My comment where just to give good recommendation on the WOSwitch strategy:  it’s working great.
>
> But also to warn you that once you make it work in dev, you might still encounter bug in extensive testing, and when you do, keep in mind that it might be related to multiples instances of your component (WOSwitch will have to instantiate one of your switched component).
> At the time, once I figured out exactly what was the problem, it was not hard to fix, so you should have no problem fixing it either.
>
> Sorry, it’s all I remember.
>
> jfv
>
>
>> On May 29, 2015, at 6:21 PM, HOUNKPONOU Ronald <email@hidden> wrote:
>>
>> Please Jean-François!
>>
>> How to not use it?
>> I would like to learn good practices.
>>
>>
>> 2015-05-29 23:12 GMT+01:00 Jean-François Veillette <email@hidden>:
>> WOSwitchComponent?
>> https://wiki.wocommunity.org/display/documentation/WOSwitchComponent
>>
>> I used it with great success, once I figured out how to not use it.
>> Right now I can’t remember what was the symptom, what what the cause and how I fixed it.
>> All I remember is that it’s related to sharing instances your component instantiated by the switch component.  So if you encounter a problem, keep that in mind.
>>
>> jfv
>>
>>
>>> On May 29, 2015, at 5:22 PM, HOUNKPONOU Ronald <email@hidden> wrote:
>>>
>>> Hi everyone!!
>>>
>>> Thanks for all your response.
>>> Everything is now working for me.
>>> I was doing a mistake in the call of the component A in a third one (C) as if A require the binding value. (A is the template that all pages should use).
>>>
>>> But i have another question (I don't know if it is best to make a separate post):
>>>
>>> Question : What is the best way to make a dynamiq page inclusion system?
>>>
>>> I have a lot of custumized components those i would like to listed on a central page (this page use my template).
>>> And i want that depending of the clicked link the corresponding components is load in the content area ofmy central page.
>>>
>>> Thanks for your help.
>>>
>>> 2015-05-29 16:57 GMT+01:00 Jean-François Veillette <email@hidden>:
>>> Hi Ronald,
>>> is your B component syncronizing bindings?
>>> If so, your B instance should receive a call equivalent to  « b.takeValueForKey(session().authenticatedUser(), “userAccount”); »  so you should comply to KVC for this key (public ivar, get/set method .. your choice) to get it assigned and available.
>>>
>>> If your B component is non-synchronized, then you have to get it whenever you need it:
>>>     « User user = this.valueForBinding(“userAccount”); »
>>>
>>> Also, since your B component is in a framework and is aware of the concept of a userAccount, I would try to keep the dependency as loose as possible and NOT add coupling directly with the session object.
>>> But if you absolutely have to do it (last resort), it could be done with simple KVC:
>>>      « User user = (User) session().valueForKey("authenticatedUser”); »
>>> or even:
>>>      « User user = (User) valueForKeyPath(“session.authenticatedUser”); »
>>>
>>> Ways of passing generic/contextual objects from the front-end layer to the lower end without adding too much coupling is by going through the editingContext.userInfo dictionary, or through the current thread userInfo dictionary (see ERXThreadStorage).  Those 2 objects are available in most lower level objects and can be set from the upper level just as easily.
>>>
>>> jfv
>>>
>>>
>>>> On May 29, 2015, at 9:11 AM, HOUNKPONOU Ronald <email@hidden> wrote:
>>>>
>>>> In A.html
>>>>
>>>> <webobject name = "template">
>>>>
>>>> </webobject>
>>>>
>>>>
>>>> In A.wood
>>>>
>>>> template : B {
>>>>    userAccount = session.authenticatedUser;
>>>> }
>>>>
>>>>
>>>> in B.html
>>>>
>>>> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
>>>>    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
>>>>
>>>> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
>>>> <head>
>>>>    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
>>>>    <title>untitled</title>
>>>> </head>
>>>> <body>
>>>> <webobject name = "specialitemedicale">
>>>> <label>Libellé</label>
>>>> <webobject name = "libelle"/>
>>>> <webobject name = "enregistrer"/>
>>>> </webobject>
>>>> </body>
>>>> </html>
>>>>
>>>> in B.wood
>>>>
>>>> specialitemedicale : WOForm {
>>>> }
>>>>
>>>> libelle : WOTextField {
>>>>   value = libelle;
>>>> }
>>>>
>>>> enregistrer : WOSubmitButton {
>>>> action="" class=""> >>>> value="Enregistrer";
>>>> }
>>>>
>>>> 2015-05-29 13:15 GMT+01:00 Johann Werner <email@hidden>:
>>>> What is your HTML? You need to wire up your binding with the actual method/ivar of your component A:
>>>>
>>>> …
>>>> <wo:B userAccount="$account" />
>>>> …
>>>>
>>>> and in A.java:
>>>>
>>>> public MyAccountClass account = …;
>>>>
>>>>
>>>>
>>>>
>>>> > Am 29.05.2015 um 13:25 schrieb HOUNKPONOU Ronald <email@hidden>:
>>>> >
>>>> > I forgot the image.
>>>> >
>>>> > 2015-05-29 12:23 GMT+01:00 HOUNKPONOU Ronald <email@hidden>:
>>>> > Hi everyone,
>>>> >
>>>> > Iam facing a problem with subcomponent binding.
>>>> >
>>>> > I have 2 componets A & B. B is to be include in A.
>>>> >
>>>> > But B need some information (eg. Authenticated user object). So i have create a binding as show in the attached picture and add its gette 7 setter in B.java.
>>>> >
>>>> > (I dont know how to specify Value Set to be my Objet Type. so i try with undefined & ressources)
>>>> >
>>>> > But the object is not passed to B.
>>>> >
>>>> > I got a NullPointerException when trying to access the passed vairable in B.java
>>>> >
>>>> > Thanks for your help.
>>>> >
>>>> > <Selection_005.png>
>>>>
>>>>
>>>>
>>>> _______________________________________________
>>>> Do not post admin requests to the list. They will be ignored.
>>>> Webobjects-dev mailing list      (email@hidden)
>>>> Help/Unsubscribe/Update your Subscription:
>>>>
>>>> This email sent to email@hidden
>>>
>>>
>>
>>
>
> _______________________________________________
> Do not post admin requests to the list. They will be ignored.
> Webobjects-dev mailing list      (email@hidden)
> Help/Unsubscribe/Update your Subscription:
>
> This email sent to email@hidden


Do not post admin requests to the list. They will be ignored. Webobjects-dev mailing list (email@hidden) Help/Unsubscribe/Update your Subscription: This email sent to email@hidden
  • Follow-Ups:
    • Re: Components binding with custom object
      • From: HOUNKPONOU Ronald <email@hidden>
References: 
 >Re: Components binding with custom object (From: Jean-François Veillette <email@hidden>)
 >Re: Components binding with custom object (From: Timothy Worman <email@hidden>)
 >Re: Components binding with custom object (From: HOUNKPONOU Ronald <email@hidden>)

  • Prev by Date: Re: Components binding with custom object
  • Next by Date: Re: Components binding with custom object
  • Previous by thread: Re: Components binding with custom object
  • Next by thread: Re: Components binding with custom object
  • Index(es):
    • Date
    • Thread