dijit
Version:
Dijit provides a complete collection of user interface controls based on Dojo, giving you the power to create web applications that are highly optimized for usability, performance, internationalization, accessibility, but above all deliver an incredible u
52 lines (46 loc) • 2.04 kB
JavaScript
define([
"dojo/_base/declare", // declare
"dojo/sniff", // has("ie")
"./_FormWidget",
"./_FormValueMixin"
], function(declare, has, _FormWidget, _FormValueMixin){
// module:
// dijit/form/_FormValueWidget
return declare("dijit.form._FormValueWidget", [_FormWidget, _FormValueMixin], {
// summary:
// Base class for widgets corresponding to native HTML elements such as `<input>` or `<select>`
// that have user changeable values.
// description:
// Each _FormValueWidget represents a single input value, and has a (possibly hidden) `<input>` element,
// to which it serializes it's input value, so that form submission (either normal submission or via FormBind?)
// works as expected.
// Don't attempt to mixin the 'type', 'name' attributes here programatically -- they must be declared
// directly in the template as read by the parser in order to function. IE is known to specifically
// require the 'name' attribute at element creation time. See #8484, #8660.
_layoutHackIE7: function(){
// summary:
// Work around table sizing bugs on IE7 by forcing redraw
if(has("ie") == 7){ // fix IE7 layout bug when the widget is scrolled out of sight
var domNode = this.domNode;
var parent = domNode.parentNode;
var pingNode = domNode.firstChild || domNode; // target node most unlikely to have a custom filter
var origFilter = pingNode.style.filter; // save custom filter, most likely nothing
var _this = this;
while(parent && parent.clientHeight == 0){ // search for parents that haven't rendered yet
(function ping(){
var disconnectHandle = _this.connect(parent, "onscroll",
function(){
_this.disconnect(disconnectHandle); // only call once
pingNode.style.filter = (new Date()).getMilliseconds(); // set to anything that's unique
_this.defer(function(){
pingNode.style.filter = origFilter;
}); // restore custom filter, if any
}
);
})();
parent = parent.parentNode;
}
}
}
});
});