多字段xtype的字段配置只接受一個項目(也就是說,您可以在其中有一個文本字段,當配置多個值時,它們將被存儲爲稱爲鏈接的多值屬性,並且只有一個值被配置時,它將被存儲作爲稱爲鏈接的單值財產)。在您的多字段中配置的全部數據將作爲鏈接屬性存儲在您的節點中。你將無法將它們作爲「jcr:title」和「jcr:url」。
你應該創建一個自定義的xtype說「linksXtype」,它存儲了「jcr:title」和「jcr:url」作爲由某個模式分隔的單個字符串,如「***」(「jcr:title *** JCR:URL「)。
您可以在這裏找到創建自定義的xtype的細節:link
的的xtype可以這樣創建:
Ejst.CustomWidget = CQ.Ext.extend(CQ.form.CompositeField, {
/**
* @private
* @type CQ.Ext.form.TextField
*/
hiddenField: null,
/**
* @private
* @type CQ.Ext.form.ComboBox
*/
jcrtitle: null,
/**
* @private
* @type CQ.Ext.form.TextField
*/
jcrurl: null,
constructor: function(config) {
config = config || { };
var defaults = {
"border": false,
"layout": "table",
"columns":2
};
config = CQ.Util.applyDefaults(config, defaults);
Ejst.CustomWidget.superclass.constructor.call(this, config);
},
// overriding CQ.Ext.Component#initComponent
initComponent: function() {
Ejst.CustomWidget.superclass.initComponent.call(this);
this.hiddenField = new CQ.Ext.form.Hidden({
name: this.name
});
this.add(this.hiddenField);
this.jcrtitle = new CQ.Ext.form.TextField({
fieldLabel:"Jcr url",
cls:"ejst-customwidget-1",
listeners: {
change: {
scope:this,
fn:this.updateHidden
}
},
optionsProvider: this.optionsProvider
});
this.add(this.jcrtitle);
this.jcrurl = new CQ.Ext.form.TextField({
fieldLabel:"Jcr Title",
cls:"ejst-customwidget-2",
listeners: {
change: {
scope:this,
fn:this.updateHidden
}
}
});
this.add(this.jcrurl);
},
// overriding CQ.form.CompositeField#setValue
setValue: function(value) {
var parts = value.split("/");
this.jcrtitle.setValue(parts[0]);
this.jcrurl.setValue(parts[1]);
this.hiddenField.setValue(value);
},
// overriding CQ.form.CompositeField#getValue
getValue: function() {
return this.getRawValue();
},
// overriding CQ.form.CompositeField#getRawValue
getRawValue: function() {
return this.jcrtitle.getValue() + "***" +
this.jcrurl.getValue();
},
// private
updateHidden: function() {
this.hiddenField.setValue(this.getValue());
}
});
// register xtype
CQ.Ext.reg('linksXtype', Ejst.CustomWidget);
變化dialog.xml到這樣的事情
<?xml version="1.0" encoding="UTF-8"?>
<jcr:root xmlns:cq="http://www.day.com/jcr/cq/1.0" xmlns:jcr="http://www.jcp.org/jcr/1.0"
jcr:primaryType="cq:Dialog"
title="dialog"
xtype="dialog">
<items jcr:primaryType="cq:WidgetCollection">
<links
jcr:primaryType="cq:Widget"
fieldLabel="QuickLinks"
name="./links"
xtype="multifield">
<fieldConfig
jcr:primaryType="cq:Widget"
xtype="linksXtype">
</fieldConfig>
</links>
</items>
</jcr:root>
要獲取值迭代存儲爲鏈接屬性的字符串數組,並將每個字符串拆分爲「***」
編輯:其ACS-共享包下
的Adobe諮詢服務提供了一個更優雅的multifieldpanel小工具來處理這個用例。它簡化了方法,並且無需爲每個必需字段組合編寫自定義xtype。數據以JSON格式存儲,並附帶taglibs以從節點提取數據。鏈接:http://adobe-consulting-services.github.io/acs-aem-commons/features/widgets.html#multi-field-panel-since-150
謝謝。只是想澄清一下,我能夠讀取我的數據爲「jcr:title」和「jcr:url」。請參閱此處的鏈接[http://pbrd.co/1vT2L4H](http://pbrd.co/1vT2L4H)。我遇到的問題是,當我嘗試編輯時,textfield組件無法讀取這些值並填充到對話框中。 – jpr 2014-10-10 07:51:11
連接這些值的唯一缺點是,您可能在推出活動副本時遇到問題 - 例如,如果您的網站結構具有'es'作爲'en'的實時副本,則通常路徑字段會在展開時自動更新此路徑,但我認爲它在拼接字段方面存在問題,因爲它將整個組合視爲直接文本字段。 – anotherdave 2014-10-10 08:17:43
@jpr這些值可能會被存儲,但我不認爲它會以你想要的方式工作。如果檢出多字段的代碼,它會在字段config節點中添加提及的xtype項。因此,當您打開對話框時,您在多字段中存儲的名稱與您在多字段中提供的名稱一起迭代併爲多字段中的每個項目設置。使用您當前的設置,值不會以multifield的代碼預期的形式存儲。您將不得不創建自定義xtypes AFAIK。 – 2014-10-10 09:17:02