Отображение всплывающей подсказки dijit с помощью Dojo DataGrid и JSonRestStore

Есть ли более эффективный способ отображения всплывающей подсказки при наведении курсора на ячейку? Используя атрибут структуры для форматирования сетки данных, есть ли способ использовать средство форматирования для отображения всплывающей подсказки dijit вместо использования атрибута заголовка html.

Вот столбец, в котором отображается всплывающая подсказка.

    var subscriberGridLayout = [        
       {    
            name: " ",
            field: "ExpirationDate",
            formatter: function(value){
                if(value){
                    expDate = formatDateIE(value);
                    return toolTip();
                }
                else
                    return " ";
            },
            styles: "text-align: center;",
            width: "30px"
        },

Вот функция, которая отображает значок всплывающей подсказки через тег изображения, но вместо всплывающей подсказки dijit она просто использует заголовок html для отображения всплывающего окна.

    function toolTip(){
        src = "'/Subscriber/resources/images/icons/icon_error.gif'/>";
        if(dojo.date.difference(today, expDate) <= 0 ){
            message = "Credential expired.";
            return "<img title='"+ message + "' src=" + src + "";
        } else if(dojo.date.difference(today, expDate) <= 60) {
            message = "This Subscriber will expire in " + dojo.date.difference(today, expDate) + " days."
                        + "&#10; &#10;To prevent an interruption in the Subscriber&rsquo;s access, please sumbit a request to " + 
                            "renew the Subscriber within 30 days of the expiration date.";
            return "<img title='"+ message + "' src=" + src + "";
        } else {
            return " ";
        }

    }

person user2270542    schedule 01.05.2013    source источник


Ответы (1)


Я бы сделал что-то вроде:

new Tooltip({
    connectId: grid.domNode,
    selector: "td",
    getContent: function(matchedNode){
        return matchedNode.innerText
    }
});

С помощью grid.domNode вы можете получить сгенерированный DOM вашего виджета. Сетка создает структуру таблицы, поэтому вы можете получить ячейки, используя свойства selector и getContent.

Я должен сказать, что это не совсем правильный способ сделать это, потому что теперь вы играете с внутренней структурой виджета Dojo. Если они однажды решат не использовать таблицу в качестве структуры DOM, ваш код не будет работать.

Но я не думаю, что есть лучший способ добиться этого, в конце концов вам всегда придется переводить ячейку Dojo в узел DOM (поскольку всплывающие подсказки основаны на DOM). Вы, конечно, можете подключить всплывающую подсказку к каждой ячейке, но я пробовал это раньше, и это немного глючило (иногда всплывающая подсказка не всплывала).

Я также создал JSFiddle, чтобы показать вам рабочий пример.

person g00glen00b    schedule 02.05.2013