0

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

到目前为止,我对找到的文档不太满意。有人知道睡衣或 GWT 的好参考吗?

我的主要困难来自于理解诸如 onClick、onMouseleave 等监听器的来源?它们是如何触发的?它们在哪里定义?我定义它们吗?

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

我知道这些是非常笼统的问题,但我真的只是在寻找正确方向的观点。

谢谢您,我感谢您提供的任何帮助。

4

1 回答 1

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 示例之外,还非常需要更好的介绍教程。我自己也在为此苦苦挣扎。祝你好运

附言。我创建了似乎可行的小回调示例。如果人们在这里纠正我并编辑此示例以对人们更有用,我会很高兴。我在这里要做的就是使用 2 个页面进行导航(由 2 个类表示:Intro 和 Outro)

    导入 pyjd
    从 pyjamas.ui.VerticalPanel 导入 VerticalPanel  
    从 pyjamas.ui.RootPanel 导入 RootPanel
    从 pyjamas.ui.SimplePanel 导入 SimplePanel
    从 pyjamas.ui.DockPanel 导入 DockPanel
    从 pyjamas.ui.Hyperlink 导入超链接
    从 pyjamas.ui.Button 导入按钮
    从 pyjamas.ui.HTML 导入 HTML
    从睡衣导入窗口

    类站点(SimplePanel):
        def onModuleLoad(self):
            SimplePanel.__init__(self)

            self.panel = DockPanel()
            self.intro = 介绍()
            self.outro = Outro()
            self.index = HTML('index')
            self.curPage = self.index

            vp=垂直面板()
            vp.add(self.index)

            self.link1 = Hyperlink('菜单项 1')
            self.link2 = Hyperlink('菜单项 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.panel.remove(self.curPage, DockPanel.CENTER)
            self.panel.add(self.outro, DockPanel.CENTER)
            self.curPage = self.outro

    类介绍(SimplePanel):
        def __init__(self):
            SimplePanel.__init__(self)
            self.vp = VerticalPanel()
            self.html = HTML('这是介绍')
            self.button = Button('点击我', self)
            self.vp.add(self.html)
            self.vp.add(self.button)
            self.setWidget(self.vp)

        def onClick(self):
            Window.alert('onClick Intro')

    Outro 类(SimplePanel):
        def __init__(self):
            SimplePanel.__init__(self)
            self.vp = VerticalPanel()
            self.html = HTML('这是结尾')
            #我们可以这样做
            self.button1 = Button('click me1', getattr(self, 'onBUTTON1'))
            self.button2 = Button('点击 me2')
            #或者设置监听器
            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('来自 button1 的你好')
        def onBUTTON2(self):
            Window.alert('来自 button2 的你好')

    如果 __name__ == '__main__':
        pyjd.setup('./Site.html')
        应用程序 = 网站()
        app.onModuleLoad()
        pyjd.run()  

于 2012-04-17T11:04:40.063 回答