On Tue, 2012-07-03 at 13:43 +0200, Peter Bittner wrote:
> Daniel,
> 
> I came across the same problem when working on the console logging
> functionality. The trick is to squeeze everything into a variable and
> use the @-notation to access it from Pyjs (e.g. JS("""
> eval(@{{myvar}}) """) or so).

Indeed.

> 
> Take a look at the __debug/__info/... functions in
> https://github.com/pyjs/pyjs/blob/master/library/pyjamas/logging/handlers.py
> 
> I don't know, actually, what the @-notation does. Maybe someone more
> experienced here can explain? (Kees? Anthony?)

The @{{foo}} transports python variables to the javascript scope.

So, the final_setup would probably be:

def final_setup(self, selected = '"red", "green", "blue"'):
    myid = str(self.myid)
    JS('''parent.jQuery(@{{myid}}).select2({tags:[@{{selected}}]});''')


> 
> Good luck Daniel,
> Peter
> 
> 
> 2012/7/3 Daniel Gonzalez <gonva...@gmail.com>:
> > Hi,
> >
> > I am trying to define the following component, which uses native javascript:
> >
> > class MyTaggingComponent(HTML):
> >
> >
> >     def __init__(self, myid, values, width = 300):
> >         self.myid = myid
> >         values = ','.join(values)
> >         html =  '<p><input type="hidden" id="%s" style="width:%dpx"
> > value="%s"/></p>' % (myid, width, values)
> >         HTML.__init__ (self, html)
> >
> >
> >     def final_setup(self, selected = '"red", "green", "blue"'):
> >         my_javascript = 'parent.jQuery("#%s").select2({tags:[%s]});' %
> > (self.myid, self.selected)
> >         JS(my_javascript)
> >
> > I get a compile error: "JS function only supports constant strings".
> >
> > This is a big problem, since, in order to reuse this component, I need to
> > have variable content in the inline javascript. I have taken a look at the
> > implementation of JS in pyjs/pyjs/src/pyjs/translator_proto.py, but it is
> > not clear for me whether bypassing this restriction is possible, or how
> > could it be done.
> >
> > Could you suggest a workaround?
> >
> > Thanks,
> > Daniel



Reply via email to