Re: Pass-through bindings from parent to child component
Re: Pass-through bindings from parent to child component
- Subject: Re: Pass-through bindings from parent to child component
- From: Chuck Hill <email@hidden>
- Date: Sun, 6 Jan 2008 20:57:12 -0800
Hi Paul,
On Jan 6, 2008, at 8:41 PM, Paul Hoadley wrote:
I know there's at least one other recent thread about component
bindings, but can anyone give me a start on this:
On 03/01/2008, at 4:18 PM, Paul Hoadley wrote:
Is there an idiom for passing through _any and all_ bindings from
a parent to a child component without being specific about it?
Simply put, no. The is reason is that parents do not pass bindings
to their children. The children take them from their parents. If
the child was not written to handle arbitrary bindings, there is no
way you can force it to. You could subclass the child and extend it
to handle any and all bindings.
That is, I've got a component that wraps a Dynamic Element. If I
add the binding 'abc="xyz"' to, say, a WOTextField, it will pass
that through to the HTML 'input' element as an attribute and its
value.
It does not pass them through to WOTextField. WOTextField (or one of
its superclasses, WOInput or WOHTMLElement, I don't recall and am too
lazy to figure it out) has code to take any bindings that it does not
recognize and add them to the input as key=value.
How can I get my containing component to do something similar—is
there an idiom for passing completely arbitrary bindings from a
parent to a child component? If I can work that out, I think I can
answer my original questions:
1. I want to be able to set any bindings on the WOBrowser which
were set on the LSBrowser. I can list them out in the WOD:
browser : WOBrowser {
list = ^list;
item = ^item;
selections = ^selections;
displayString = ^displayString;
multiple = ^multiple;
id = ^id;
value = ^value;
escapeHTML = ^escapeHTML;
selectedValues = ^selectedValues;
name = ^name;
disabled = ^disabled;
size = ^size;
class = classList;
}
But then WOLips flags an error because I've "set" 'selectedValues'
and 'selections'. All I'm trying to express here is that
whichever of the two is set on the parent should be passed through
to the child.
I think that what you need to do is to implement LSBrowser as a
WODynamicElement so that you have the necessary access to the
bindings. This means that instead of using a WOBrowser, you are
going to have to re-implement it. Subclassing WOBrowser might be a
good approach.
2. Similarly, I'd like to be able to pass through arbitrary
bindings such as 'id' in the list above without having to be
specific about it. Although 'id', for example, is not in the API
for WOBrowser, WOBrowser will pass that through to the
corresponding HTML element. How can I mimic this functionality in
my LSBrowser?
When you need "advanced" access to bindings like this,
WODynamicElement is usually the best solution. This is a small
amount of information on them here: http://wiki.objectstyle.org/
confluence/display/WO/Web+Applications-Development-WO+Component-Code
+Template+and+WODs
Otherwise, feel free to ask questions and I will try to help you out.
Chuck
--
Practical WebObjects - for developers who want to increase their
overall knowledge of WebObjects or who are trying to solve specific
problems.
http://www.global-village.net/products/practical_webobjects
_______________________________________________
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