【问题标题】:customize shape of kendo tooltip自定义剑道工具提示的形状
【发布时间】:2013-12-13 08:58:15
【问题描述】:

我想为网格自定义剑道工具提示的形状。
我在剑道网站上看到了这个例子,它在盒子外面有箭头,盒子有一个漂亮的圆形。 在 css 上工作,使用 .k-tooltip 我可以更改宽度、高度、背景。但我得到一个带有箭头的方框,有时会覆盖部分文本内容。
我认为标注会有所帮助,但我什么也得不到。
如何更改箭头的形状、图像和位置、框的形状?
此外,如何仅在网格单元格中的部分文本可见时触发工具提示?
非常感谢任何提示

问候

马可

【问题讨论】:

    标签: kendo-tooltip


    【解决方案1】:

    我认为“箭头”是指标注。您可以通过以下方式关闭标注:

    $(document).ready(function() {
      $("#target").kendoTooltip({
        callout: false
      });
    });
    

    关于您的问题“此外,如何仅在网格单元格中的部分文本可见时触发工具提示?”

    如果我对您的理解正确,您希望仅在存在带省略号的文本时显示工具提示(在单元格中部分可见),但如果有全文可见或存在全文,您不想显示工具提示是单元格中没有文本。如果是这种情况,您可以这样做:

    function initializeTooltip(element, filter) {
        return element.kendoTooltip({
            autoHide: true,
            filter: filter,
            callout: false,
            content: function (e) {
                var target = e.target,
                    tooltip = e.sender,
                    tooltipText = "";
    
                if (isEllipsisActive(target[0])) {
                    tooltipText = $(target).text();
                }
    
                tooltip.popup.unbind("open");
    
                tooltip.popup.bind("open", function (arg) {
                    tooltip.refreshTooltip = false;
    
                    if (!isEllipsisActive(target[0])) {
                        arg.preventDefault();
                    } else if (tooltipText !== $(target).text()) {
                        tooltip.refreshTooltip = true;
                    }
                });
    
                return tooltipText;
            },
            show: function () {
                if (this.refreshTooltip) {
                    this.refresh();
                }
            }
        }).data("kendoTooltip");
    };
    
    // determanes if text has ellipsis
    function isEllipsisActive(e) {
        return e.offsetWidth < e.scrollWidth;
    }
    
    $(function () {
        initializeTooltip($("#yourGridId"), ".tooltip");
    });
    

    tooltip 在这种情况下是您想要使用工具提示的列的类名,但您可以随意调用该类。如果你使用的是 Kendo ASP.NET MVC,它看起来像这样

          c.Bound(p => p.ClientName)
              .Title("Client")
              .HtmlAttributes(new {@class = "tooltip"});
    

    【讨论】:

    • 很棒的答案。 qq:您正在确定是否使用offsetwidth vs scrollWidth显示...,这正是css确定是否显示省略号的方式吗?只是好奇。谢谢!需要明确的是,我正在使用溢出:隐藏;和文本溢出:省略号;在我的网格中显示我的省略号
    • 另外,我有点不清楚你在用“refreshTooltip”做什么。如果我遵循逻辑,您首先将 tooltipText 设置为 '',然后将其设置为您悬停的单元格的文本(如果存在 ...)。但是然后你检查它是否再次设置为'',如果是,你刷新工具提示?这个检查有什么目的,对不起,如果我很密集,但我去掉了所有这些,它似乎工作正常,但也许我错过了一些东西。非常感谢!
    • @snuggles。老实说,我不知道 CSS 是否如何确定是否显示省略号,但我发现该逻辑如何确定是否存在省略号并且它一直都很好用 :)
    • @snuggles 回答您的第二个问题。是的,它有点复杂,因为工具提示的工作方式。基本上你有 3 个事件(显示、打开和上下文)。刷新工具提示时会调用上下文,因为它需要为工具提示获取新的上下文,但是当您将鼠标悬停时,它会为该单元格调用一次。所以如果你改变单元格的值,它仍然会在工具提示中显示原始内容,所以你需要做的就是将工具提示绑定到“打开”事件,现在每次工具提示都会显示它会检查是否有新内容并重新检查内容的宽度以及是否需要刷新
    • 啊,明白了——这是有道理的,而且这是我以后会被咬住的东西。谢谢!就css而言,我发现它工作得非常完美,但是有一个阈值,省略号会显示但工具提示不会被触发。我会搞砸它,但这没什么大不了的。干杯!
    猜你喜欢
    • 2015-01-27
    • 1970-01-01
    • 2013-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多