【问题标题】:Closing a Sitecore Speak Dialog that was opened from a Rich Text Editor关闭从富文本编辑器打开的 Sitecore Speak 对话框
【发布时间】:2014-06-28 17:34:39
【问题描述】:

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

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

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

这看起来相当简单,但我无法为我的应用程序复制它 - 它什么也不做。我意识到当前的 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 应用程序? 欢迎提出任何建议。

【问题讨论】:

    标签: sitecore sitecore-speak-ui


    【解决方案1】:

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

    【讨论】:

    • 很高兴您找到了解决方案。
    • 这是现在在 Github 上可用的模块的一部分。这是原位代码(SPEAK 组件的一部分):github.com/TwentyGotoTen/SitecoreThesaurusSpeak/blob/…
    • 嗯,非常感谢您将我指向这个 github 存储库。这是我需要实施的一个很好的起点。
    【解决方案2】:

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

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

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

    PS:我没试过。

    【讨论】:

    • 好主意,但不幸的是它不起作用,大概是因为涉及到 Telerik 控件。请参阅我的答案以了解我最终确定的内容。
    【解决方案3】:

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

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

    (如果你使用 ConfirmationDialog)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多