【问题标题】:Can we show a different tooltip when a Dashboard Button is disabled?当仪表板按钮被禁用时,我们可以显示不同的工具提示吗?
【发布时间】:2012-07-01 01:48:31
【问题描述】:

我正在专门使用 Tridion 2011 的 PowerTools 扩展,但这适用于任何带有仪表板按钮的 Anguilla 扩展。

我们可以设置<ext:title> 来获得悬停工具提示。用户将鼠标悬停在 GUI 扩展按钮上以查看此文本。请参阅config 中的“计数项目”扩展名示例。

<ext:extension assignid="CountItems" name="Count Items" 
               pageid="Power Tools" groupid="Tools">
    <ext:command>PT_CountItems</ext:command>
    <ext:title>Count Items</ext:title>
    <ext:issmallbutton>false</ext:issmallbutton>
    <ext:dependencies>
        <cfg:dependency>PowerTools.Commands</cfg:dependency>
    </ext:dependencies>
    <ext:apply>
        <ext:view name="DashboardView" />
    </ext:apply>
</ext:extension>

当扩展程序未启用时,我们向change this tooltip to some helpful text 发出请求。

我可以在 Chrome 控制台的按钮中看到“计数项目”文本。

<div id="CountItems" class="tridion button PT_CountItems ribbonitem disabled"
     title="Count Items" c:command="PT_CountItems" 
     c:controltype="Tridion.Controls.RibbonButton" 
     style="-webkit-user-select: none; ">
    <div class="image">&nbsp;</div>
    <div class="text">Count Items</div>
</div>

同样在控制台中,我可以选择文本周围的 div:$("div#CountItems &gt; div.text")。我不确定如何获取文本。

问题: 当 GUI 按钮处于非活动状态时,我应该/应该如何更改工具提示文本?

我可能也需要澄清这些。

  • 在 Anguilla(或 PowerTools)中,$() 是否与 jQuery() 相同?我试过$("div#CountItems &gt; div.text").text() 并得到Object #&lt;HTMLDivElement&gt; has no method 'text'
  • 当按钮被禁用时,是否有首选或可配置的方式来设置该工具提示?我确信我们可以在 DOM 中找到一个元素,但我可能遗漏了一些东西。

最后,

  • 一般来说,{NameSpace}.Commands.{ExtensionName}.prototype.isValidSelection = function(selection) { } 是更改此工具提示的正确位置吗?
  • 对于上下文菜单,我相信我们有 _isAvailable 代替。

【问题讨论】:

  • 您可以扩展现有命令并调用它们的“_isAvailable”或“_isEnabled”方法,检查它们是否返回false,然后更改工具提示?
  • 谢谢,根据@Nuno 和@Frank 的反馈,我将使用$controls.getControl($("#CountItems"), "Tridion.Controls.Button").setTooltip("Count Item is..."); 设置工具提示,它适用于PowerTools.Commands.CountItems.prototype.isValidSelection = function (selection) { }
  • @Frank 还提到了离线创建事件侦听器的选项,例如$evt.addEventListener("onitemselected", function(selected) { PowerTools.Button1.setTooltip(...); PowerTools.Command1._isItEnabled = ...; });。接下来我得试试这个。

标签: tridion tridion-2011


【解决方案1】:

$() 和 jQuery() 一样吗?

没有。 Tridion UI 包含一个 jQuery 库子集:sizzle CSS selector engine

因此,所有用于选择一组元素的常用 jQuery 技巧都可以使用,但其他 jQuery 方法(AJAX 东西、事件处理程序、实用方法)将可用。

请注意,如果您想在您的扩展程序中使用完整的 jQuery,您可以通过将其包含在所谓的 noConflict mode 中来实现。

我可以设置按钮禁用时的工具提示吗?

据我所知,Tridion GUI 中的按钮只有一个工具提示,并且每个按钮状态都会显示该工具提示。也没有ontooltip 事件,当 GUI 即将显示它时,您可以挂钩来计算工具提示。

按钮确实有一个公共setTooltip,因此一旦检测到某种情况,您就可以自己更改它。如果您在 Anguilla 源代码中搜索 setTooltip,您会发现一些使用方法的示例(在欢迎屏幕中,将组件演示文稿添加到页面和 BluePrint 查看器中时)。

isValidSelection 是更改此工具提示的正确位置吗?

不要问“我可以在显示时更改工具提示吗?”,而是尝试将其改写为“哪个状态导致哪个工具提示?我可以检测到状态更改并在那个时候设置正确的工具提示吗?”。

如果您的工具/命令仅在选择某种类型的项目时启用,您应该检测该条件,然后在那时设置工具提示。然后当 GUI 需要向您显示工具提示时,您无需执行任何操作。

当然,这只会将您的问题推到其他地方:如何检测这种或那种情况。但您会发现,为此类“应用程序状态更改”查找事件通常比为“ontooltip”查找事件更容易。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-08
    • 2021-02-27
    • 1970-01-01
    • 1970-01-01
    • 2020-12-03
    • 2018-05-10
    • 1970-01-01
    • 2023-01-22
    相关资源
    最近更新 更多