You can use $m->caller() and $m->callers() to get the component that called you...does that help?

Incidentally, if it is always the enclosing (I assume you mean calling) component, why don't you just pass it as an argument?

Jon

On Jul 23, 2009, at 10:30 AM, Donald French wrote:

Thanks Jon,

Unfortunately I need to access methods and attributes defined in the enclosing component, not the top level component. Is there any easy way to do this?

On Thu, Jul 23, 2009 at 6:30 AM, Jonathan Swartz <swa...@pobox.com> wrote:
This was a change in Mason 1.1:

- ** The base_comp is now changed for each component call, unless that
component call uses a component object for its first argument, or the
call starts with SELF: or PARENT:.

It was controversial at the time, for this reason...

If what you want in submit_notice is always the top level component, you can use

   $m->request_comp->attr('submit_notice_message')

Jon


On Jul 22, 2009, at 4:57 PM, Donald French wrote:

My apology... I accidentally hit send. Here is my full message.

I have been tasked with upgrading our Mason install from 1.02 to the latest version (1.4.2) and all went smoothly until I tried to access certain components that appear to be missing their inheritance chain. Keep in mind this all worked in the old 1.02 version.

I have a component (/_styles/_top_level) that contains...

<% $m->call_next() %>

<& /_methods/_submit_notice &>

<%attr>
submit_notice_message => "Your request is being processed..."
</%attr>

In the child component (/_method/_submit_notice) I have...

<div id="submit_notice">
 <% $m->base_comp->attr('submit_notice_message') %>
</div>

The child component simply accesses the attribute defined in the calling component however when I run this I get this Mason error:

"no attribute 'submit_notice_message' for component /_methods/ _submit_notice [html]"

If I Dumper the $m->base_comp component I can see that the /_method/ _submit_notice component is the object that is having ->attr() called on it and I can additionally see that in the code_cache the / top_level component is referenced and it contains an attr hash with the correct string in it.

The really strange part however if that if I loop through the $m- >callers() array and print out the component stack and their attr hashes I get:

PATH: /_methods/_submit_notice
ATTRS: $VAR1 = {};

PATH: /_styles/_top_level:top_matter
ATTRS: $VAR1 = {};

PATH: /autohandler
ATTRS: $VAR1 = {
 'hide_environment_bar' => '0',
 'escape_from_iframe' => 1
};

The attr hash is empty for /_styles/_top_level this case. I am not sure this is relevant but I am mentioning it in case someone else has also encountered this issue.

Thanks for any help!



------------------------------------------------------------------------------
_______________________________________________
Mason-users mailing list
Mason-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mason-users



------------------------------------------------------------------------------
_______________________________________________
Mason-users mailing list
Mason-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mason-users

Reply via email to