我正在尝试为请求各种详细信息的页面创建一个编辑小部件,然后将这些详细信息存储为新创建节点的属性。
例如:制作模型里程
我想将它们存储为 /content/cars 或类似的父节点下的节点。
如何获取小部件以在 /content/cars 下创建新节点并将这些属性存储在那里?
我是否必须将数据发送到我创建的 servlet?还是有启用此功能的选项?
您可能想要做的是在包含页面中您希望创建节点的路径中包含一个组件。
例如,如果您有一个页面 /content/cars,并且您想在 /content/cars/jcr:content/chevy 下创建一个 Chevy 节点,您可以在该片段中包含该组件:
<cq:include path="chevy" resourceType="myapp/components/manufacturer" />
这将包括内容并呈现它,并允许使用位于 /apps/myapp/components/manufacturer 的组件对其进行编辑。
如果您愿意,您甚至可以让节点位于绝对路径,例如,如果您想在另一个页面上引用 /content/data/cars/chevy 的内容,您可以使用:
<cq:include path="/content/data/cars/chevy" resourceType="myapp/components/manufacturer" />
根据 Adobe 提供的备忘单:
默认的 Sling POST servlet 通过检查 ExtJS 对话框中包含的输入标记的“名称”属性来识别要更新的 JCR 属性。要配置像文本字段或下拉字段这样的小部件以定位和更新特定属性,您需要在小部件定义中指定属性的名称。
例如,如果您使用 XML 文件在 /content/cars 定义您的页面对话框,并且您希望有允许用户将模型、品牌和年份存储到汽车页面的 jcr:content 节点的小部件。您的关联对话框定义将包含如下所示的节点:
<make
jcr:primaryType="cq:Widget"
xtype="textfield"
name="./make"/>
<model
jcr:primaryType="cq:Widget"
xtype="textfield"
name="./model"/>
<year
jcr:primaryType="cq:Widget"
xtype="textfield"
name="./year"/>
要更改小部件类型,您将调整xtype属性并将属性更改为 target,您将调整name属性。请注意,它与正在调用对话框的页面/组件的内容节点是相对的(在这种情况下,与 /content/cars/jcr:content 相对)。
另一个例子:假设你想将 make 的值存储到像 /content/cars/jcr:content/brands 这样的节点上名为 'make' 的属性中,那么你的定义将如下所示:
<make
jcr:primaryType="cq:Widget"
xtype="textfield"
name="./brands/make"/>
有关可用 xtypes 的参考,请查看: http ://dev.day.com/docs/en/cq/current/widgets-api/index.html
尝试这个 :
将此js函数添加到您的页面
function doOpenDlg(url, path) {
var d = CQ.WCM.getDialog(url);
var reloadPage = true;
if(d) {
if( reloadPage ) {
d.success = function(form, action) {
CQ.Util.reload(CQ.WCM.getContentWindow());
};
}
d.show();
d.loadContent(path);
}
}
然后创建一个类似文件的对话框。在这个例子中:
/apps/myapp/components/page/mypage/myxmlfile.xml
然后您可以打开一个与此文件匹配的对话框:
<input type="button" value="Open my dialog" style="font-size: 14px;font-weight: bold;"
onclick="doOpenDlg('/apps/myapp/components/page/mypage/myxmlfile.infinity.json', '<%=currentNode.getPath() %>');" />
这样,您的对话数据将保存在 currentNode 中,但您可以放置任何您想要的路径。