コントローラーに次のような JSON 応答を発行させたいと思います。
{
sidebar: {
xtype: "container",
flex: 1,
bodyCls: "my-sidebar",
itemId: "my-sidebar-container",
items: [
{
xtype: "panel",
animCollapse: false,
collapseFirst: false,
collapsed: false,
collapsible: true,
flex: 1,
bodyCls: "my-sidebar-message-section",
itemId: "my-sidebar-message-section-container",
html: "<h1>Messages (2)</h1><p>Bank will be closed on September 4th, 2013 for Labor Day</p><p>Lorem ipsum dolor sit amet, <a href="http://google.com">consectetur</a> adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</p>",
listeners: {
boxready: function(p) {
alert('Hi');
}
}
}
]
}
}
私の Grails コントローラーでは、次のように定義します。
package com.fourgablesguy.myapp
import grails.converters.JSON
class SidebarController {
def generateSideBar() {
def sidebarItems = [
[
xtype: 'panel',
animCollapse: false,
collapseFirst: false,
collapsed: false,
collapsible: true,
flex: 1,
bodyCls: 'my-sidebar-message-section',
itemId: 'my-sidebar-message-section-container',
html: messageSectionHtml,
listeners: [
boxready: "function(p) { alert('Hi');}"
]
]
]
[
xtype: 'container',
flex: 1,
bodyCls: 'my-sidebar',
itemId: 'my-sidebar-container',
items: sidebarItems
]
}
ただし、grails.converters.JSON は function() 定義を文字列に変換するため、コントローラー アクションによって出力される実際の JSON には function() の文字列が含まれます。
{
sidebar: {
xtype: "container",
flex: 1,
bodyCls: "my-sidebar",
itemId: "my-sidebar-container",
items: [
{
xtype: "panel",
animCollapse: false,
collapseFirst: false,
collapsed: false,
collapsible: true,
flex: 1,
bodyCls: "my-sidebar-message-section",
itemId: "my-sidebar-message-section-container",
html: "<h1>Messages (2)</h1><p>Bank will be closed on September 4th, 2013 for Labor Day</p><p>Lorem ipsum dolor sit amet, <a href="http://google.com">consectetur</a> adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</p>",
listeners: {
boxready: "function(p) {alert('Hi');}"
}
}
}
]
}
}
具体的な問題は次の行です: boxready: "function(p) {alert('Hi');}" 上記を代わりに次のように返す方法を知りたいです: boxready: function(p) {alert('Hi') );}
これは実際には、JSON で返そうとしている「オブジェクト データ」ではありません。これが不可能かどうかは理解できます。