41 lines
2.0 KiB
JavaScript
41 lines
2.0 KiB
JavaScript
//>>built
|
|
define("dojox/app/bind", ["dojo/_base/kernel", "dojo/query" , "dojo/_base/array", "dijit", "dojo/_base/json"], function(dojo, query, array, dijit, djson){
|
|
return function(/*Array of widgets*/widgets, /*Object*/ models){
|
|
array.forEach(widgets, function(item){
|
|
//TODO need to find a better way to get all bindable widgets
|
|
var bindWidgets = query("div[dojoType^=\"dojox.mvc\"],div[data-dojo-type^=\"dojox.mvc\"]", item.domNode);
|
|
//set ref for each dojox.mvc widgets.
|
|
array.forEach(bindWidgets, function(widget){
|
|
//TODO need to find a better way to know which model the widget is bound to
|
|
//currently, the ref attribute in dojox.mvc.Group cannot be empty, leave
|
|
//explicit string with single quote in ref attribute.
|
|
var ref = widget.getAttribute("ref");
|
|
|
|
if(ref === null){
|
|
var refProps = widget.getAttribute("data-dojo-props");
|
|
if(refProps){
|
|
try{
|
|
refProps = djson.fromJson("{" + refProps + "}");
|
|
}catch(e){
|
|
// give the user a pointer to their invalid parameters. FIXME: can we kill this in production?
|
|
throw new Error(e.toString() + " in data-dojo-props='" + extra + "'");
|
|
}
|
|
ref = refProps.ref.replace(/^\s*rel\s*:\s*/, "");
|
|
}
|
|
}
|
|
|
|
if (ref) {
|
|
if(ref[0] === "'"){
|
|
ref = ref.substring(1, ref.length-1);
|
|
}
|
|
var model = dojo.getObject(ref, false, models);
|
|
if (model){
|
|
dijit.byNode(widget).set("ref", model);
|
|
}
|
|
}
|
|
}, this);
|
|
}, this);
|
|
|
|
}
|
|
});
|