2012-11-20 39 views
10

我正在做一个用户界面(SiteEdit)的GUI扩展,通过覆盖其中一个javascript文件的行为来添加一些funcionality。 JavaScript文件是“/Scripts/Components/ExtComponentField.js”和目标为 “SiteEdit” 延伸:访问GUI扩展中的“自定义配置”

Tridion.Web.UI.Editors.SiteEdit.Views.Content

所有扩展名为效果很好,和我有什么,我想有,但现在我想用

设置/ customconfiguration/clientconfiguration

延伸配置的节点,使用一些初始化参数,但是没有办法来访问$配置元件在JavaScript,和Tridion.Core.Configuration.Editors [“myExt”]。配置为空。

我见过在“仪表板”或“脚印”等各种javascript中使用此自定义配置,但它有可能在“内容”上?我在扩展配置上丢失了什么?

谢谢。

回答

3

我怕我没有测试这一点,但你应该能够使用:

Extensions.YourExt.getConfigurationItem = function (itemName, editorName) 
{ 
    var editor = $config.Editors[editorName].configuration; 
    if (editor) 
    { 
     var confXml = $xml.getNewXmlDocument(editor); 
     var confObj = $xml.toJson(confXml); 

     if (confObj[itemName]) 
      return confObj[itemName]; 
     else 
      return ""; 
    } 
} 

然后,您可以使用它以下列方式:

$this.getConfigurationItem("YOUR_CONFIG_ITEM_NAME", "YOUR_EDITOR_NAME").toString(); 

在您的扩展配置(下面的<theme>节点),您可以输入自己的配置值:

<customconfiguration> 
    <clientconfiguration xmlns="http://www.sdltridion.com/2009/GUI/Configuration/Merge"> 
    <YOUR_CONFIG_ITEM_NAME>The value</YOUR_CONFIG_ITEM_NAME> 

你能CON公司:)

+0

这正是我试图使用自定义配置的方式,但没有$ config对象,并且Tridion.Core.Configuration.Editors [“myExt”]。configuration is null –

+0

谢谢John,你说的方式没问题当JavaScript被加载到配置可用的块中时。在这种情况下,.js位于“Content”块中,并且没有配置。通过**块**我的意思是在其中加载JavaScript的组,比如Bootstrap,Views,Editor等。我认为必须通过在扩展配置中添加一些_dependency_来将该配置包含在Content组中。 –

3

我通常使用一个单独的JS文件有以下几点:

Type.registerNamespace("Extensions.Namespace"); 

Extensions.Namespace.getEditorConfigSection = function Editor$getEditorConfigSection() { 
    if (this._settings === undefined) { 
     var editor = $config.Editors["ThisEditorName"]; 
     if (editor && editor.configuration && !String.isNullOrEmpty(editor.configuration)) { 
      var configSectionXmlDoc = $xml.getNewXmlDocument(editor.configuration); 
      this._settings = $xml.toJson(configSectionXmlDoc.documentElement); 
     } 
    } 
    return this._settings; 
}; 

,并在配置中添加它在一个单独的组:

<cfg:group name="Extensions.Namespace" merge="always"> 
    <cfg:fileset> 
     <cfg:file type="script">/Scripts/Definitions.js</cfg:file> 
    </cfg:fileset> 
</cfg:group> 

那么无论你需要它,你可以添加以下依赖项:

<cfg:dependency>Extensions.Namespace</cfg:dependency> 

然后我通常使用这样的函数来获取ac某些配置值:

Extensions.Namespace.Something.prototype._getMyConfigValue = function Something$_getMyConfigValue() { 
    var configSection = Extensions.Namespace.getEditorConfigSection(); 
    if (configSection) { 
     return configSection.myconfigvalue; 
    } 
}; 
+0

感谢Bart, 同样的事情,$ config不可用在** .../WebUI/Editors/SiteEdit/Views/Content_v6.1.0.55920.29_.aspx?mode = js **其中的代码该扩展程序已加载。 我扩展目标** Tridion.Web.UI.Editors.SiteEdit.Views.Content **,似乎在这种情况下,配置对象没有加载。 可能是一个依赖关系的问题。 –

3

“内容”组中包含的代码在承载您发布的网页的IFRAME中运行。正如你可以想象的那样,那里包含的文件数量应该尽量减少,因此很多功能都不可用。

我的建议是仅在主窗口中读取配置,然后将所需的设置传递给在IFRAME中运行的代码 - 通过使用Tridion.Utils.CrossDomainMessaging实用程序类($ xdm )。

相关问题