Daniel,
try this:
|
defbind_pyjs_change(self):
# This is supposed to bind the change event to the change pyjs function
# Since we are binding a global function to the self.change method, we want
# that global function to be unique (or at least to have the myid suffix)
global_unique_change ="change_%s"%(self.myid)
setattr(wnd(),global_unique_change,self.change)
# Now bind the change event to the wnd().global_unique_change function,
which is actually self.change
myjs ='parent.jQuery("#%s").bind("change", function() {
parent.%s() });'%(self.myid,global_unique_change)
log.info("Now calling JS: %s",myjs)
JS(""" eval(@{{myjs}}) """)
|
Regards,
Istvan
2012-07-11 17:22 keltezéssel, Daniel Gonzalez írta:
Thanks for your help, this is now working. I have an example more or
less complete here:
git clone g...@github.com:gonvaled/pyjs.git
cd pyjs/examples
python jquery-select2 --download
There is still one important issue open: the self.change method is
bound to wnd().change. See here:
https://github.com/gonvaled/pyjs/blob/master/examples/jquery-select2/Select2TaggingComponent.py#L57
If there are multiple Select2TaggingComponent defined, they will
overwrite this binding, so that only the last one is really active.
You can see the problem in the example application, which has two
components defined.
The solution would be to do somehting like this:
|
defbind_pyjs_change(self):
# This is supposed to bind the change event to the change pyjs function
# Since we are binding a global function to the self.change method, we
want
# that global function to be unique (or at least to have the myid
suffix)
global_unique_change ="change_%s"%(self.myid)
wnd().global_unique_change =self.change
# Now bind the change event to the wnd().global_unique_change
function, which is actually self.change
myjs ='parent.jQuery("#%s").bind("change", function() {
parent.%s() });'%(self.myid,global_unique_change)
log.info("Now calling JS: %s",myjs)
JS(""" eval(@{{myjs}}) """)
|
The problem is that wnd().global_unique_change =self.change generates:
|
$wnd['__is_instance__']&&typeof$wnd['__setattr__']=='function'?$wnd['__setattr__']('global_unique_change',$p['getattr'](self,'change')):$p['setattr']($wnd,'global_unique_change',$p['getattr'](self,'change'));
|
As you see, 'global_unique_change' is taken as literal, but should be
a variable in this particular case. It should generate:
|
$wnd['__is_instance__']&&typeof$wnd['__setattr__']=='function'?$wnd['__setattr__'](global_unique_change,$p['getattr'](self,'change')):$p['setattr']($wnd,global_unique_change,$p['getattr'](self,'change'));
|
I have modified that manually in the output javascript, and it works.
Now the question is how to tell pyjscompile to do the "right thing". I
realize this is very special case, but how can it be covered?
Thanks,
Daniel