关闭从富文本编辑器打开的Sitecore Speak对话框

时间:2014-06-28 17:34:40

标签: sitecore sitecore-speak-ui

我将Sheer UI模块转换为SPEAK,除了一个问题外,它通常都很轻松。它是一个通过富文本编辑器中的按钮单击打开的对话框。我无法弄清楚如何关闭它并返回一个值。

我已经尝试过查看Sitecore现有的SPEAK对话框的方式。例如SelectMediaDialog

  • 它有一个名为insertButtonRule的规则组件。
  • 目标控件设置为SelectMediaButton,触发器为 设为click
  • 相关规则的条件/操作是 "当always时,将对话框返回值设置为component MediaResultsListControl selectedItemId"。

这看起来相当简单,但我无法为我的应用程序复制它 - 它什么也没做。我意识到当前的Sitecore SPEAK对话框都没有从富文本编辑器启动,所以这并不是一个类似的比较。也许这就是我打开对话框的方式?

这是我用来打开对话框的js命令(它与我原来的纯粹UI应用程序基本相同,但网址不同):

RadEditorCommandList["OpenMyApp"] = function(commandName, editor, tool) 
{
    scEditor = editor; 
    var range = scEditor.getSelection().getRange()

    range.expand("word");
    scEditor.getSelection().selectRange(range)
    var html = scEditor.getSelection().getText().trim();

    scEditor.showExternalDialog(
      "/sitecore/client/MySpeakApp?term=" + escape(html),
      null, //argument
      300, //width
      500, //height
      scMyCallback,
      null,
      "My Speak App",
      true, //modal
      Telerik.Web.UI.WindowBehaviors.Close, // behaviors
      false, //showStatusBar
      false //showTitleBar
    );
};


function scMyCallback(sender, returnValue) 
{
    if (returnValue) 
       scEditor.pasteHtml(returnValue.text);
}

有没有其他人为Rich文本编辑器编写SPEAK应用程序? 欢迎任何建议。

3 个答案:

答案 0 :(得分:2)

所以我不得不去看Telerik网站,这段代码改编自我发现的内容:

var radWindow;

if (window.radWindow)
    radWindow = window.radWindow;
else if (window.frameElement && window.frameElement.radWindow)
    radWindow = window.frameElement.radWindow;
else
    window.close();

radWindow.Close("My return value");

将这个与闪亮的新SPEAK代码混合在一起感觉有点混乱,但是现在我很高兴它有效。

答案 1 :(得分:1)

“选择媒体”对话框使用此行返回值

 window.top.dialogClose(returnValue); //return value is the value you want to return

如果您尝试在SPEAK页面中调用此方法,是否会关闭对话框?

PS:我从未尝试过。

答案 2 :(得分:1)

我知道它有点晚了你已经解决了它:-) 在SPEAK中,您可以像这样触发ConfirmationDialog:

myConfirmationDialog.CloseClick = "ok";
myConfirmationDialog.hide();

(如果你在哪里使用ConfirmationDialog)