从其父级访问动态包含视图的 grails zkui composer 实例
Access grails zkui composer instance of dynamically included view from its parent
我真的需要一些帮助。场景是我根据用户交互动态地在我的 webapp 中包含视图。主要问题是我需要访问包含的视图作曲家的当前实例。
当用户做出一些选择并加载子视图时,用户可以在子视图中输入值,然后我需要将这些值收集到主视图。
一些代码片段以某种方式显示了我正在努力完成的事情:(仅必要部分)
grails-app/views/mainview/main.gsp
...
<z:div id="mainContent"></z:div>
...
grails-app/views/mainview/templates/one.gsp
<z:window apply="org.package.composers.OneComposer">
...
</z:window>
grails-app/views/mainview/templates/two.gsp
<z:window apply="org.package.composers.TwoComposer">
...
</z:window>
grails-app/composers/org/packages/composers/MainComposer.groovy
Div mainContent
Composer currentSubComposer = null
...
void setSubContent(String templateURI){
mainContent.children.clear()
mainContent << { include(src: templateURI) }
currentSubComposer = /* HOW TO GET THE COMPOSER INSTANCE ? */
}
...
我知道如果您在主视图中包含一个子视图 "statically"
无需动态使用 include,那么您可以从
parent 如以下代码片段所示:
grails-app/views/common/_subview.gsp
<z:window id="subview" apply="org.package.composers.SubviewComposer">
grails-app/views/mainview/main.gsp
...
<z:div id="mainContent">
<g:render template="/common/subview" />
</z:div>
...
grails-app/composers/org/packages/composers/MainComposer.groovy
Window subview
Composer c = (Composer)subview.getAttribute("subview#composer")
但我不能这样做,因为一切都是动态的。我需要能够做到
同样的事情。
所以分解基本问题:
- 我有一个主要作曲家
- 在主要作曲家中,我包含一个 gsp 文件(子视图)
- 子视图有自己的作曲家
如何从主 composer 访问子视图 composer 实例?
感谢任何帮助!
我将 post 我自己的解决方案,使用 grails 会话,如果其他人有兴趣的话。也许还有其他方法可以解决这个问题,但可以解决问题:
我在 main composer 中创建了一个 callback/register 方法:
public void registerChildComposer(Composer c){
currentChildComposer = c
}
并且在子视图包含在主作曲家之前:
session["parentComposerInstance"] = this
并且在子视图composer的doAfterCompose中:
Composer parentComposer = session["parentComposerInstance"]
parentComposer.registerChildComposer(this)
瞧,在这个类似于 "handshake" 的模式之后,我得到了我正在寻找的子视图编辑器的句柄。
我真的需要一些帮助。场景是我根据用户交互动态地在我的 webapp 中包含视图。主要问题是我需要访问包含的视图作曲家的当前实例。
当用户做出一些选择并加载子视图时,用户可以在子视图中输入值,然后我需要将这些值收集到主视图。
一些代码片段以某种方式显示了我正在努力完成的事情:(仅必要部分)
grails-app/views/mainview/main.gsp
...
<z:div id="mainContent"></z:div>
...
grails-app/views/mainview/templates/one.gsp
<z:window apply="org.package.composers.OneComposer">
...
</z:window>
grails-app/views/mainview/templates/two.gsp
<z:window apply="org.package.composers.TwoComposer">
...
</z:window>
grails-app/composers/org/packages/composers/MainComposer.groovy
Div mainContent
Composer currentSubComposer = null
...
void setSubContent(String templateURI){
mainContent.children.clear()
mainContent << { include(src: templateURI) }
currentSubComposer = /* HOW TO GET THE COMPOSER INSTANCE ? */
}
...
我知道如果您在主视图中包含一个子视图 "statically" 无需动态使用 include,那么您可以从 parent 如以下代码片段所示:
grails-app/views/common/_subview.gsp
<z:window id="subview" apply="org.package.composers.SubviewComposer">
grails-app/views/mainview/main.gsp
...
<z:div id="mainContent">
<g:render template="/common/subview" />
</z:div>
...
grails-app/composers/org/packages/composers/MainComposer.groovy
Window subview
Composer c = (Composer)subview.getAttribute("subview#composer")
但我不能这样做,因为一切都是动态的。我需要能够做到 同样的事情。
所以分解基本问题:
- 我有一个主要作曲家
- 在主要作曲家中,我包含一个 gsp 文件(子视图)
- 子视图有自己的作曲家
如何从主 composer 访问子视图 composer 实例?
感谢任何帮助!
我将 post 我自己的解决方案,使用 grails 会话,如果其他人有兴趣的话。也许还有其他方法可以解决这个问题,但可以解决问题:
我在 main composer 中创建了一个 callback/register 方法:
public void registerChildComposer(Composer c){
currentChildComposer = c
}
并且在子视图包含在主作曲家之前:
session["parentComposerInstance"] = this
并且在子视图composer的doAfterCompose中:
Composer parentComposer = session["parentComposerInstance"]
parentComposer.registerChildComposer(this)
瞧,在这个类似于 "handshake" 的模式之后,我得到了我正在寻找的子视图编辑器的句柄。