我的CQ5.5应用程序中的某些页面没有'jcr:content'节点。由于节点不存在,因此这些特定页面的属性不存在,用户无法修复。我想添加一个按钮,允许用户添加缺少的节点。我已经能够添加一个“Fix Properties”按钮,它附带了一个自定义函数,可以检索现有节点,并且我能够检查是否存在jcr:content节点。我无法在任何地方找到有关如何从头开始创建节点的文档。我认为这是一件很平常的事情,但很难找到它。
我总体上发现了这个节点的文档,大部分功能都可以使用,但到目前为止还没有骰子:http://dev.day.com/docs/en/cq/current/widgets-api/index.html?class=CQ.Ext.data.Node
到目前为止还有这个功能。每次尝试都是单独完成的:CQ.wcm.SiteAdmin.createProperties = function() {
var path = this.getCurrentPath();
var tree = CQ.Ext.getCmp(this.id + "-tree");
//var nodet = tree.getSelectionModel().getSelectedNode(); //gets the selected node
//nodet.childNodes[i] skips over jcr:content nodes
var nodej = CQ.Util.eval(path + '.2.json'); //am currently using this to get the node data instead
if(typeof nodej['jcr:content'] == 'undefined') //If the jcr:content node does not exist
{
//Attempt 1:
nodej['jcr:content'] = new CQ.wcm.Node({
jcr:primaryType: "cq:PageContent",
jcr:title: "title"});
//Attempt 2:
nodej['jcr:content'] = new Node({ //Note no 'CQ.wcm'
jcr:primaryType: "cq:PageContent",
jcr:title: "title"});
//Attempt 3:
nodej.appendChild( new CQ.wcm.Node({
jcr:primaryType: "cq:PageContent",
jcr:title: "title"}));
//Attempt 4:
nodej.appendChild( new CQ.wcm.Node({
Name : "jcr:content",
jcr:primaryType: "cq:PageContent",
jcr:title: "title"}));
}
};
上述尝试都没有做任何事情,但这是我能想到的最接近的事情。
我确实发现了这个问题:How to add new property to JCR node through CQ.extjs?但它没有显示任何内容,它也是关于添加到现有节点的。
答案 0 :(得分:2)
您的所有尝试都会修改Javascript对象nodej
,但没有机制可以自动在存储库中反映这些更改。这就是为什么没有保存更改的原因。要创建新节点,您需要发送HTTP POST请求:
CQ.HTTP.post(path + "/jcr:content", null, {
"jcr:primaryType" : "cq:PageContent",
"jcr:title" : "Title"
});
此请求将由Sling framework(更确切地说,由SlingPostServlet)处理,这将创建新资源。
旁注:请注意,如果Javascript关联数组中包含一个特殊字符,例如:
,则需要引用该关键字名称。因此,以下代码将起作用:
console.log({
"jcr:primaryType" : "cq:PageContent"
});
但是这个会导致语法错误:
console.log({
jcr:primaryType : "cq:PageContent"
});