2012-04-05 31 views
0

我很难理解睡衣/ GWT事件处理系统。我目前正在使用最新的0.8睡衣来测试。我不确定什么是最好的事件处理结构,因为我从来没有做过GUI编程。睡衣事件处理

我到目前为止找到的文档还没有太多运气。有谁知道睡衣或GWT的一个很好的参考?

我的主要困难来自理解onClick,onMouseleave等听众来自哪里?他们如何触发?他们在哪里定义?我是否定义它们?

什么是事件处理系统的分层结构?

我知道这些都是非常一般的问题,但我真的只是在正确的方向寻找一个点。

谢谢,我感谢任何帮助。

回答

1

我建议你在示例文件夹中学习源代码。开始与这个http://pyjs.org/book/output/Bookreader.html#Getting%20Started

有一些链接这是有帮助的,我: http://gwt.google.com/samples/Showcase/Showcase.html

http://pyjs.org/examples/

此外,在示例文件夹中有一个名为showcase一个很好的例子,让你所有的API和一些有用的代码样本 /localhost/somedir/showcase/output/Showcase.html

由于API是类似的,你可以随时检查他们的书籍(特别是对理解回调等有帮助..):

http://www.amazon.com/Beginning-Google-Web-Toolkit-Professional/dp/1430210311/ref=sr_1_12?ie=UTF8&qid=1334659695&sr=8-12

http://www.amazon.com/Google-Toolkit-Applications-Ryan-Dewsbury/dp/0321501969/ref=sr_1_7?ie=UTF8&qid=1334659695&sr=8-7

的Django和睡衣 http://www.derekschaefer.net/2011/02/08/pyjamas-django-pure-win/

不过我同意有超越hello world示例更好的入门教程的巨大需求。我自己正在努力。祝你好运

ps。我创建了一个似乎可行的小回调示例。如果有人在这里纠正我的错误并编辑这个例子,以便更好地为人们使用,我会感到非常高兴。所有我试图在这里做的是导航2页(由2类代表:介绍和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()