我很难理解睡衣/ GWT事件处理系统。我目前正在使用最新的0.8睡衣进行测试。我不知道最好的事件处理结构是什么,因为我从未进行过GUI编程。
到目前为止,我发现的文档并没有太多运气。有谁知道睡衣或GWT的好参考?
我的主要困难来自于理解onClick,onMouseleave等听众来自哪里?它们是如何触发的?他们在哪里定义?我定义它们吗?
事件处理系统的分层结构是什么?
我知道这些是非常普遍的问题,但我真的只是在寻找正确方向的观点。
谢谢你,我感谢你给予的任何帮助。
答案 0 :(得分:1)
我建议你在examples文件夹中学习source。从这个http://pyjs.org/book/output/Bookreader.html#Getting%20Started
开始有些链接对我有帮助: http://gwt.google.com/samples/Showcase/Showcase.html
同样在examples文件夹中有一个名为showcase
的好例子,它为您提供了所有API和一些有用的代码示例
/localhost/somedir/showcase/output/Showcase.html
由于API类似,你可以随时查看它们(特别有助于理解回调等):
为Django和睡衣 http://www.derekschaefer.net/2011/02/08/pyjamas-django-pure-win/
然而,我同意除了hello world示例之外,还需要更好的介绍教程。我自己也在苦苦挣扎。祝你好运
PS。我创建了一个似乎有用的小回调示例。如果人们在这里纠正我并编辑这个例子对人们更有用,我会很高兴。所有我想在这里做的是导航2页(由2个类:由Intro和Outro代表)
import pyjd from pyjamas.ui.VerticalPanel import VerticalPanel from pyjamas.ui.RootPanel import RootPanel from pyjamas.ui.SimplePanel import SimplePanel from pyjamas.ui.DockPanel import DockPanel from pyjamas.ui.Hyperlink import Hyperlink from pyjamas.ui.Button import Button from pyjamas.ui.HTML import HTML from pyjamas import Window class Site(SimplePanel): def onModuleLoad(self): SimplePanel.__init__(self) self.panel = DockPanel() self.intro = Intro() self.outro = Outro() self.index = HTML('index') self.curPage = self.index vp=VerticalPanel() vp.add(self.index) self.link1 = Hyperlink('menu item 1') self.link2 = Hyperlink('menu item 2') self.link1.addClickListener(getattr(self, 'onLINK1')) self.link2.addClickListener(getattr(self, 'onLINK2')) self.panel.add(self.link1, DockPanel.WEST) self.panel.add(self.link2, DockPanel.WEST) self.panel.add(self.index, DockPanel.CENTER) RootPanel().add(self.panel) def onLINK1(self): self.panel.remove(self.curPage, DockPanel.CENTER) self.panel.add(self.intro, DockPanel.CENTER) self.curPage = self.intro def onLINK2(self): self.panel.remove(self.curPage, DockPanel.CENTER) self.panel.add(self.outro, DockPanel.CENTER) self.curPage = self.outro class Intro(SimplePanel): def __init__(self): SimplePanel.__init__(self) self.vp = VerticalPanel() self.html = HTML('This is intro') self.button = Button('click me', self) self.vp.add(self.html) self.vp.add(self.button) self.setWidget(self.vp) def onClick(self): Window.alert('onClick Intro') class Outro(SimplePanel): def __init__(self): SimplePanel.__init__(self) self.vp = VerticalPanel() self.html = HTML('This is outro') #we can do it this way self.button1 = Button('click me1', getattr(self, 'onBUTTON1')) self.button2 = Button('click me2') #or set up listener self.button2.addClickListener(getattr(self,'onBUTTON2')) self.vp.add(self.html) self.vp.add(self.button1) self.vp.add(self.button2) self.setWidget(self.vp) def onBUTTON1(self): Window.alert('hello from button1') def onBUTTON2(self): Window.alert('hello from button2') if __name__ == '__main__': pyjd.setup('./Site.html') app = Site() app.onModuleLoad() pyjd.run()