Thanks istvan, this is working!
On Wednesday, July 11, 2012 9:37:24 PM UTC+2, istvan.vago wrote:
>
> Daniel,
> try this:
>
> def bind_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 [email protected]: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:
>
> def bind_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
>
>
>
>
>