IE VBScript HTC Behavior - статические переменные между всеми экземплярами поведения? - PullRequest
1 голос
/ 22 октября 2009

Я не уверен на 100%, какой вопрос мне следует задать - поскольку я слишком уверен в том, как лучше всего это сделать ... поэтому позвольте мне описать, что я пытаюсь сделать (используя упрощенный пример), и мы пойду оттуда.

У вас есть произвольные элементы HTML (IMG, A, TD, что угодно). С помощью CSS им присваивается поведение HTML

.BoldSelection { 
    behavior: url(SelectBold.htc); 
    border: thin solid black;  
}

Поведение просто помещает толстую границу вокруг элементов, когда они нажимаются - НО - им нужно установить ранее выбранный элемент с нормальной рамкой.

Итак, вот источник HTC. Это работало бы, если бы CurrentFocusedElementID был статическим между всеми экземплярами поведения. Но это не так.

<Public:Attach Event="onContentReady" onEvent="LoadInit" />

    <Script Language="VBScript" type="Text/VBScript">

        Sub LoadInit
            element.onClick = getRef("setFocusedElement")
        End Sub

        Sub setFocusedElement
            set ele = document.getElementByID(CurrentlyFocusedElementID)
            ele.style.border = "thin solid black"
            CurrentlyFocusedElementID = element.id
            element.style.border = "thick solid black"
        End Sub

    </Script>

Я также подумал, что если бы я мог хранить произвольное свойство или атрибут в DOM содержащего документа, то я мог бы использовать это как общее место для поиска последнего активного элемента ... увы, я не могу найти способ сделать это без какого-либо взлома (т. е. угона значения класса тела)

Я бы хотел сохранить весь код, содержащийся в HTC. Мне нравится модульная мода делать это таким образом ... таким образом, я могу просто назначить поведение CSS и все готово - никаких обратных вызовов ... никаких родительских атрибутов ... никаких HTML-компонентов для объявления.

Как бы вы посоветовали мне заняться этим?

Заранее спасибо.

1 Ответ

1 голос
/ 22 октября 2009

Недостающий кусок головоломки был .. экспанос. Пользовательские произвольные атрибуты. Вот законченный .HTC

<Public:Attach Event="onContentReady" onEvent="LoadInit" />

  <Script Language="VBScript" type="Text/VBScript">

    ' This is an example HTC only.   If we were only setting borders, it'd make more sense to store
    ' the previous element's border type and keep the rest of the formatting.  For simplicity we are
    ' swapping out the class name

    Sub LoadInit

      ' No ID defined for this element.  Highlight it for the developer
      If element.id = "" Then
        element.style.bordercolor = "rgb(200,50,10)"
        element.style.borderwidth = "thin"
        element.style.borderstyle = "dashed"
        Exit Sub
      End If

      ' Attach our Click Events
      element.onClick = getRef("BoldIt")
      element.onDblClick = getRef("BoldItMore")

    End Sub


    ' Changes the Class Name for the current element, and if a previously
    ' selected element exists, restore its original classname
    Sub changeClass(newCSSClass)
      ' Storing the Expando on the document.body element
      Set ele = window.document.body

      ' Retrieve our two custom attributes - the ID of the element, and what its original ClassName was.
      LastEle = ele.getAttribute("LastHighlightedEle")
      LastEleClass = ele.getAttribute("LastHighlightedEleClass")

      ' If there was in fact a previously selected element - restore the classname
      If not isnull(LastEle) then
        set oldEle = window.document.getElementByID(LastEle)
        oldEle.className = LastEleClass
        set oldEle =  Nothing
      End If

      ' Set our two custom attributes to this element and adjust this element's CSS ClassName
      LastEle = element.id
      LastEleClass = element.className
      ele.setAttribute "LastHighlightedEle",LastEle
      ele.setAttribute "LastHighlightedEleClass",LastEleClass
      element.className = newCSSClass
    End Sub

    ' Single Click Event - 'Thick' is a CSS Style for a 3px border
    Sub BoldIt
      changeClass("Thick")
    End Sub

    ' Double Click Event - 'Thicker' is a CSS Style for a 4px border
    Sub BoldItMore
      changeClass("Thicker")
    End Sub

  </Script>
...