Tucker, I haven't tested that with a newer version of OL, since I'm
very busy today. I'm not sure how other people use the searchSubnodes
(attribute, value) method. I'd like to hear what other people think
about it. Thanks!
On Nov 15, 2009, at 6:48 PM, P T Withington wrote:
I see.
It's annoying that searchSubnodes does not have an option to pass a
predicate, instead of just a property name and value. Maybe we
should add another API to do that, say `searchSubnodesMatching`?
You would pass it a predicate function that would return true or
false. Then you could say something like:
searchSubnodesMatching(function(node) { return node is lz.view; });
I guess the closest you could get then is
searchSubnodes('constructor', lz.view);
which would find all the nodes that _are_ <view>s. (But not
anything that is a subclass of view. But, you'd have the same issue
testing for classname.)
On 2009-11-15, at 11:41, Raju Bitter wrote:
Understood, the classes have a tagname field. But the instances
don't have one, which doesn't give the ability to search the
subviews/subnodes of a view for instances of a specific class. At
least I don't know how to do that.
Take this code:
<canvas debug="true">
<view name="myView" width="100" height="100" bgcolor="red">
</view>
</canvas>
How could I search the canvas for a list of subviews based on the
lz.view class? canvas.searchSubnodes("tagname", "view") doesn't
work, since canvas.myView.tagname is undefined. Of course I could
write my own method to do that, but I thought it's handy to be able
to search the subnodes for specific instances of a class.
On Nov 15, 2009, at 3:58 PM, P T Withington wrote:
All 4.0 classes have a `tagname` field. Anywhere you used
`classname` in 3.x you should use `constructor.tagname` in 4.x.
We did this because LFC class names are different from the tag
they represent and we wanted a uniform API for both LZX and core
classes. Using `constructor.tagname` will be forward compatible.
On 2009-11-15, at 09:38, Raju Bitter wrote:
Thanks, Tucker. But that would only work for 4.1, I guess. 4.0.x
didn't use the lz. namespace. I found a workaround using a bit
more of initialization code.
- Raju
On Nov 15, 2009, at 2:49 PM, P T Withington wrote:
On 2009-11-15, at 06:19, Raju Bitter wrote:
In an old app OL 3.4 app I used the following code:
var tabs = parent.searchSubnodes('classname', 'CustomTabs');
But in 4.0.18 (Webtop) that doesn't work any more. What
happened to the concept of being able to access the name of the
class through nodeObject.classname? That worked in 3.3, and in
4.0.18 (Webtop) it returns "Object", which is not very helpful.
By looking at the source code for LzNode I saw that it's
possible to access the real classname through
object.constructor.classname.
Is that a bug, or a feature?
You want to update your code to use 'tagname' instead of
'classname'. This was part of the attempt to make the LFC and
user classes uniformly accessible. For all tags `t` in LZX:
lz[t].tagname === t