dojox
Version:
Dojo eXtensions, a rollup of many useful sub-projects and varying states of maturity – from very stable and robust, to alpha and experimental. See individual projects contain README files for details.
37 lines (33 loc) • 1.24 kB
JavaScript
define([
"dojo/_base/lang",
"dijit/registry",
"dojo/Stateful"
], function(lang, registry){
var resolve = function(/*dojo/Stateful|String*/ target, /*dojo/Stateful?*/ parent){
// summary:
// Find a dojo/Stateful for the target.
// description:
// If target is not a string, return target itself.
// If target is "widget:widgetid", returns the widget whose ID is widgetid.
// If target is "rel:object.path", or target is other string, returns an object under parent (if specified) or under global scope.
// target: dojo/Stateful|String
// The data binding to resolve.
// parent: dojo/Stateful?
// The parent data binding. Used when the data binding is defined inside repeat.
if(typeof target == "string"){
var tokens = target.match(/^(expr|rel|widget):(.*)$/) || [];
try{
if(tokens[1] == "rel"){
target = lang.getObject(tokens[2] || "", false, parent);
}else if(tokens[1] == "widget"){
target = registry.byId(tokens[2]);
}else{
target = lang.getObject(tokens[2] || target, false, parent);
}
}catch(e){}
}
return target; // dojo/Stateful
};
// lang.setObject() thing is for back-compat, remove it in 2.0
return lang.setObject("dojox.mvc.resolve", resolve);
});