2

我正在将 Sheer UI 模块转换为 SPEAK,除了一个问题外,它通常非常轻松。这是一个对话框,通过在富文本编辑器中单击按钮打开。我不知道如何关闭它并返回一个值。

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

  • 它有一个名为insertButtonRule.
  • 目标控件设置为SelectMediaButton,触发器设置为click
  • 关联规则的条件/动作是“何时always,将对话框返回值设置为组件 MediaResultsListControl selectedItemId”。

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

这是我用来打开对话框的 js 命令(它与我的旧 Sheer UI 应用程序基本相同,但 URL 不同):

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);
}

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

4

3 回答 3

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 代码混合在一起感觉有点混乱,但现在我很高兴它可以工作。

于 2014-07-01T22:06:16.227 回答
1

选择媒体对话框正在使用此行返回值

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

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

PS:我没试过。

于 2014-06-30T15:07:10.260 回答
1

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

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

(如果你在哪里使用 ConfirmationDialog)

于 2016-10-10T12:12:19.337 回答