I see. One option might be to include code in your "component.load" view 
that makes use of the component's response.files, just like the code in 
web2py_ajax.html. For example, in "component.load" include:
 
{{
for _k,_file in enumerate(response.files or []):
  if _file in response.files[:_k]:
     continue
  _file0=_file.lower().split('?')[0]
  if _file0.endswith('.css'):}}
     <link href="{{=_file}}" rel="stylesheet" type="text/css" />{{
  elif _file0.endswith('.js'):}}
     <script src="{{=_file}}" type="text/javascript"></script>{{
  pass
pass
}}
 
The above will link your component's css and js files in the component HTML, 
which will be inserted in your 'index' page (give that you have ajax=False). 
If you don't want to repeat that code in all your .load views, you can 
probably create a function in a model file or module and just call the 
function from your views.
 
Anthony
 

On Saturday, May 7, 2011 12:01:44 PM UTC-4, Iceberg wrote:

> Thank you Anthony for your comments and here comes my clarification. 
>
> You are right that, adding response.files within a component, has no 
> effect at all when called by "component.load". But I still keep a copy 
> of those response.files inside the component, because they are needed 
> when visiting "component.html" (during developing or debugging phase). 
>
> On the other hand, when we have to copy those response.files in action 
> "skeleton" or action "index", that does not feel elegant, because 
> action "index" has to explicitly include some helper resources which 
> not needed by itself. Imagine that, after I change implementation of 
> "component" later, I have to modify "index" also. Grrr. 
>
> Pbreit's suggestion is what I can do right now (thank you Pbreit too), 
> it is DRY, but still not solving the unnecessary coupling mentioned 
> above. 
>
> Regards, 
> Iceberg 
>
>
> On May 7, 11:04 pm, Anthony <abas...@gmail.com> wrote: 
> > Does adding to response.files within a component controller work at all? 
> > With ajax=False, it looks like LOAD creates a new environment (and 
> response) 
> > to run the component controller, so I'm not sure appending to 
> response.files 
> > within a component controller will affect the response.files of the 
> parent 
> > controller. 
> > 
> > response.files is only used by web2py_ajax.html, which is typically 
> included 
> > in layout.html. Your index view probably extends layout.html, so 
> > response.files added within the index controller will get included by 
> > web2py_ajax.html. However, your component .load views probably do not 
> extend 
> > layout.html, so I would guess response.files added within component 
> > controllers would be ignored. 
> > 
> > Haven't tried it, though, so I may be missing something. 
> > 
> > Anthony 
> > 
> > 
> > 
> > 
> > 
> > 
> > 
> > On Saturday, May 7, 2011 9:52:27 AM UTC-4, Iceberg wrote: 
> > > Hi Massimo, 
> > 
> > > Can web2py support chaining response.files inside a component? 
> > 
> > > Scenario. 
> > 
> > > def component(): 
> > >     response.files.extend([ 
> > >         URL(..., 'fancy_helper1.js'), 
> > >         URL(..., 'fancy_helper2.js'), 
> > >         ......, 
> > >         URL(..., 'fancy_helper10.js'), 
> > >         ]) 
> > >     return {'': 'Some fancy stuff'} 
> > 
> > > def skeleton(): 
> > >     response.files.extend([ 
> > >         URL(..., 'fancy_helper1.js'), 
> > >         URL(..., 'fancy_helper2.js'), 
> > >         ......, 
> > >         URL(..., 'fancy_helper10.js'), 
> > >         ]) # SAME AS THOSE IN component(). Can I omit this? 
> > >     return {'': LOAD('default', 'component.load', ajax=False)} 
> > 
> > > def index(): 
> > >     response.files.extend([ 
> > >         URL(..., 'fancy_helper1.js'), 
> > >         URL(..., 'fancy_helper2.js'), 
> > >         ......, 
> > >         URL(..., 'fancy_helper10.js'), 
> > >         ]) # SAME AS THOSE IN component(). Can I omit this? 
> > >     return {'': LOAD('default', 'skeleton.load', ajax=False)} 
> > 
> > > Currently, if I add one more helper_extra.js into my fancy 
> > > component(), I needed to duplicate them into skeleton() and index(). 
> > > It is not DRY. Can it be improved? 
> > 
> > > Regards, 
> > > Ray Luo (Iceberg)

Reply via email to