sample skeleton application with dojo toolkit & arcgis js api v 4.30
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

57 lines
1.8 KiB

define([
"dojo/aspect",
"dojo/_base/array",
"dojo/_base/lang",
"dijit/_WidgetBase",
"./_atBindingMixin",
"dijit/registry"
], function(aspect, array, lang, _WidgetBase, _atBindingMixin){
return function(/*dijit/_WidgetBase...*/ w){
// summary:
// Monkey-patch the given widget so that they looks at dojox/mvc/at set in them and start data binding specified there.
// w: dijit/_WidgetBase...
// The widget.
array.forEach(arguments, function(w){
if(w.dataBindAttr){
console.warn("Detected a widget or a widget class that has already been applied data binding extension. Skipping...");
return;
}
// Apply the at binding mixin
lang._mixin(w, _atBindingMixin.mixin);
// Monkey patch widget.postscript to get the list of dojox/mvc/at handles before startup
aspect.before(w, "postscript", function(/*Object?*/ params, /*DomNode|String*/ srcNodeRef){
this._dbpostscript(params, srcNodeRef);
});
// Monkey patch widget.startup to get data binds set up
aspect.before(w, "startup", function(){
if(this._started){
return;
}
this._startAtWatchHandles();
});
// Monkey patch widget.destroy to remove watches setup in _DataBindingMixin
aspect.before(w, "destroy", function(){
this._stopAtWatchHandles();
});
// Monkey patch widget.set to establish data binding if a dojox/mvc/at handle comes
aspect.around(w, "set", function(oldWidgetBaseSet){
return function(/*String*/ name, /*Anything*/ value){
if(name == _atBindingMixin.prototype.dataBindAttr){
return this._setBind(value);
}else if((value || {}).atsignature == "dojox.mvc.at"){
return this._setAtWatchHandle(name, value);
}
return oldWidgetBaseSet.apply(this, lang._toArray(arguments));
};
});
});
return arguments; // dijit/_WidgetBase...
};
});