2012-08-13 60 views
1

我已经有一个全功能的按钮,名为“buttonreference”。我试图创建一个不同的按钮,具有相同的功能和不同的名称,如“TestButton”。我遵循了这些步骤。如何为自定义按钮触发PopupReference.js

  1. 创建了一个名为Testbutton文件夹。
  2. 为此文件夹创建虚拟目录。
  3. 在System config中创建编辑器。
  4. 但是,当我试图访问这个按钮,它的触发PopupReference.js这是buttonreference夹,而不是触发PopupReference.js这是在我的文件夹“Testbutton”。我不知道为什么它不触发我的js?

我Testbutton.js如下:

Type.registerNamespace("RTFExtensions.Commands"); 

RTFExtensions.Commands.TestButton = function Commands$TestButton(name) { 
Type.enableInterface(this, "RTFExtensions.Commands.TestButton"); 
this.addInterface("Tridion.Cme.Command", [name || "TestButton"]); 
this.addInterface("Tridion.Cme.FaCommand", [name || "TestButton"]); 
}; 

RTFExtensions.Commands.TestButton.prototype._isAvailable = function  TestButton$_isAvailable(target) { 
if (target.editor.getDisposed()) { 
    return false; 
} 

return true; 
}; 

RTFExtensions.Commands.TestButton.prototype._isEnabled = function  TestButton$_isEnabled(target) { 
if (!Tridion.OO.implementsInterface(target.editor, "Tridion.FormatArea")  || target.editor.getDisposed()) { 
    return false; 
} 

return true; 
}; 

RTFExtensions.Commands.TestButton.prototype._execute = function TestButton$_execute(target) { 
if (target.item.isActivePopupOpened()) { 
    return; 
} 

function TestButton$execute$onPopupCanceled(event) { 
    target.item.closeActivePopup(); 
}; 

var url = $config.expandEditorPath("/Popups/PopupReference.aspx","TestButton"); 
//alert(url); 
var popup = $popup.create(url,"toolbar=no,width=900,height=800,resizable=yes,scrollbars=yes", null); 

$evt.addEventHandler(popup, "submit", 
    function TestButton$execute$onPopupSubmitted(event) { 

     alert('Inside testbuttonjs'); 

     // Release 
     target.item.closeActivePopup(); 
    } 
); 

$evt.addEventHandler(popup, "unload", TestButton$execute$onPopupCanceled); 

target.item.setActivePopup(popup); 
popup.open(); 
}; 

我TestButton配置文件是这样的:

<?xml version="1.0"?> 
<Configuration xmlns="http://www.sdltridion.com/2009/GUI/Configuration/Merge" xmlns:cfg="http://www.sdltridion.com/2009/GUI/Configuration"  xmlns:ext="http://www.sdltridion.com/2009/GUI/extensions" xmlns:cmenu="http://www.sdltridion.com/2009/GUI/extensions/ContextMenu"> 
<resources cache="true"> 
    <cfg:filters/> 
    <cfg:groups> 
    <cfg:group name="RTFExtensions.TestButton"> 
    <cfg:fileset> 

     <cfg:file type="script">/Popups/PopupReference.js</cfg:file> 
    </cfg:fileset> 

    <cfg:dependencies> 
     <cfg:dependency>Tridion.Web.UI.Editors.CME</cfg:dependency> 
     <cfg:dependency>Tridion.Web.UI.Editors.CME.commands</cfg:dependency> 
    </cfg:dependencies> 
    </cfg:group> 

    <cfg:group name="RTFExtensions.TestButton.Commands" merger="Tridion.Web.UI.Core.Configuration.Resources.CommandGroupProcessor" include="byreference" merge="release"> 
    <cfg:fileset> 
     <cfg:file type="script">/Commands/TestButton.js</cfg:file> 

     <cfg:file  type="reference">RTFExtensions.TestButton.CommandSet</cfg:file> 
    </cfg:fileset> 

    <cfg:dependencies> 
     <cfg:dependency>Tridion.Web.UI.Editors.CME</cfg:dependency> 
     <cfg:dependency>Tridion.Web.UI.Editors.CME.commands</cfg:dependency> 
    </cfg:dependencies> 
    </cfg:group> 

</cfg:groups> 
</resources>  <definitionfiles/> 
<extensions> 
    <ext:editorextensions> 
    <ext:editorextension target="CME"> 
    <ext:editurls/> 
    <ext:listdefinitions/> 
    <ext:taskbars/> 
    <ext:commands/> 
    <ext:commandextensions/> 
    <ext:contextmenus/> 
    <ext:lists/> 
    <ext:tabpages/> 
    <ext:toolbars/> 
    <ext:ribbontoolbars> 
     <ext:add> 
     <!-- RIBBON TAB --> 

     <!-- GROUPS --> 
     <ext:extension assignid="ExtensionGroup" pageid="FormatPage" name="RTF Extensions"> 
      <ext:group/> 
      <ext:apply> 
      <ext:view name="ComponentView"> 
       <ext:control id="ItemToolbar"/> 
      </ext:view> 
      </ext:apply> 
     </ext:extension> 

     <!-- BUTTONS --> 
     <ext:extension pageid="FormatPage" groupid="ExtensionGroup"  name="TestButton" assignid="TestButton"> 
      <ext:command>TestButton</ext:command> 
      <ext:title>TestButton</ext:title> 
      <ext:dependencies> 
        <cfg:dependency>RTFExtensions.TestButton.Commands</cfg:dependency> 
      </ext:dependencies> 
      <ext:apply> 
      <ext:view name="ComponentView"> 
       <ext:control id="ItemToolbar"/> 
      </ext:view> 
      </ext:apply> 
     </ext:extension> 
     </ext:add> 
    </ext:ribbontoolbars> 
    </ext:editorextension> 
    </ext:editorextensions> 
    <ext:dataextenders/> 
</extensions> 
<commands> 
    <cfg:commandset id="RTFExtensions.TestButton.CommandSet"> 
    <cfg:command name="TestButton" implementation="RTFExtensions.Commands.TestButton"/> 
    <cfg:dependencies> 
    <cfg:dependency/> 
    </cfg:dependencies> 
    </cfg:commandset> 
</commands> 
<contextmenus/> 
<localization/> 
<settings> 
<defaultpage/> 
<navigatorurl/> 
<editurls/> 
<listdefinitions/> 
<itemicons/> 
<theme> 
    <path>Themes</path> 
    </theme> 
    <customconfiguration/> 
</settings> 
</Configuration> 

我PopupReference.Js是这样的:

Type.registerNamespace("RTFExtensions.Popups"); 

RTFExtensions.Popups.PopupReference = function (element) { 
Type.enableInterface(this, "RTFExtensions.Popups.PopupReference"); 
this.addInterface("Tridion.Cme.View"); 
}; 

RTFExtensions.Popups.PopupReference.prototype.initialize = function() { 
$log.message("Initializing Button Reference popup..."); 
this.callBase("Tridion.Cme.View", "initialize"); 
$log.message("Initializing TestButton Reference popup..."); 
var p = this.properties; 
var c = p.controls; 

p.HtmlValue = { value: null }; 

c.InsertButton = $controls.getControl($("#InsertButton"), "Tridion.Controls.Button"); 
$evt.addEventHandler(c.InsertButton, "click", this.getDelegate(this._execute)); 
}; 

RTFExtensions.Popups.PopupReference.prototype._execute = function() { 
alert('Inside Popupreferencejs'); 
this.fireEvent("submit", this.properties.HtmlValue); 
window.close(); 
}; 

$display.registerView(RTFExtensions.Popups.PopupReference); 

我的TestButton的CS页面如下所示:

namespace Tridion.GUI.Extensions.RTF.Popups 
{ 
[ControlResourcesDependency(new Type[] { typeof(Popup), typeof(Tridion.Web.UI.Controls.Button), typeof(Stack), typeof(Dropdown), typeof(List) })] 
[ControlResources("RTFExtensions.TestButton")] 
public partial class PopupReference : TridionPage 
{ 
    protected override void OnInit(EventArgs e) 
    { 
     base.OnInit(e); 

     TridionManager tm = new TridionManager(); 

     tm.Editor = "RTFTestButton"; 
     System.Web.UI.HtmlControls.HtmlGenericControl dep = new System.Web.UI.HtmlControls.HtmlGenericControl("dependency"); 
     dep.InnerText = "Tridion.Web.UI.Editors.CME"; 
     tm.dependencies.Add(dep); 

     System.Web.UI.HtmlControls.HtmlGenericControl dep2 = new System.Web.UI.HtmlControls.HtmlGenericControl("dependency"); 
     dep2.InnerText = "Tridion.Web.UI.Editors.CME.commands"; 
     tm.dependencies.Add(dep2); 

     //Add them to the Head section 
     this.Header.Controls.Add(tm); //At(0, tm); 
    } 
} 
} 

谁能帮我找到这个问题。我是否在创建新按钮时缺少anystep?我需要将.dll保留在任何地方吗?

+0

它将调用PopupReference.js从/Popups/PopupReference.js。你确定这是正确的道路吗?我无法看到它将如何调用任何其他文件,因为没有配置其他文件... – 2012-08-13 07:58:56

+0

@Jeremy是杰里米的路径是正确的。不知道为什么它从buttonreference文件夹调用popupreference.js,而不是调用它从测试按钮文件夹 – SDLBeginner 2012-08-13 08:40:44

回答

2

对我来说,一切看起来不错,到去!

在C#你调用使用的代码参照组:

[ControlResources("RTFExtensions.TestButton")] 

我也看到你的配置文件中包含该集团RTFExtensions.TestButton'所以一切看起来正常。

你有没有内置的.NET项目,并放弃了DLL到[tridion_home]/WEB/WEBUI/WEBROOT/bin中

+0

没有约翰我没有建立该项目。并没有将DLL放入该路径。 – SDLBeginner 2012-08-13 08:42:14

+0

如果你编译它并把dll放在那里,会发生什么? – 2012-08-13 10:08:29

+0

@Jeremy我正在使用现有的Popupreference.aspx,如果我要创建一个与现有的相同的新错误,我无法构建.net解决方案。 – SDLBeginner 2012-08-13 10:23:39

2

必须编译DLL文件,在弹出的aspx页面更新的代码。如果不是的话,当代码被编译时,你将使用页面中存在的任何值。

+0

是的我正面临编译我的“ TestButton”。当我用新的popupreference.aspx创建一个新项目时,它给出错误,如“您缺少组件参考或命名空间”。 – SDLBeginner 2012-08-13 11:19:16

+1

因此,您只需添加缺少的参考。由于许可限制,通常共享的扩展源代码将缺少某些参考。 VS会告诉你缺少的东西。 – 2012-08-13 11:33:26

+0

非常感谢..我编译了我的代码并放置了DLl。并触发我的Js .. :) – SDLBeginner 2012-08-13 12:18:08