2013-03-20 3 views
0

Я пишу функцию додзё с Dojo 1.6, который может изменить значение атрибута:dojo.getAttr не является функцией

function replaceAttributeDojo(obj, attrName, newValue) { 
     var value = dojo.getAttr(obj, attrName); 
     if (value !== 'undefined') { 
      //console.log('Found attribute '+attrName+' on object '+obj.attr('nodeName')+'[id='+obj.attr('id')+', name='+obj.attr('name')+', widgetid='+obj.attr('widgetid')+']'); 
      if (value == '') { 
       //console.log('Attribute value is empty, removing the attribute'); 
       //obj.removeAttr(attrName); 
       return; 
      } 
      var newAttrValue = value.replace(/[\d]+/g, newValue); 
      dojo.setAttr(obj, attrName, newAttrValue); 
     } else { 
      //console.log('Did not find attribute '+attrName+' on object '+obj.attr('nodeName')+'[id='+obj.attr('id')+', name='+obj.attr('name')+', widgetid='+obj.attr('widgetid')+']'); 
     } 
    } 

Трассировка код и найти поджигатель потерял на этой линии

var value = dojo.getAttr(obj, attrName); 

И он говорит мне

dojo.getAttr is not a function 

функция определена вне dojo.ready, но называется внутри dojo.ready().

Здесь секция вызова функции внутри dojo.ready()

dojo.query("div, input, select", row).forEach(function(){ 
    replaceAttributeDojo(row, 'id' , index); 
    replaceAttributeDojo(row, 'name' , index); 
    replaceAttributeDojo(row, 'widgetid' , index); 
}); 

Все на той же странице в dojo.ready() работает нормально, так как это могло возможно?

ответ

2

Если OBJ является DOM-узла:

var val = dojo.attr(node, attrName); // getter 

dojo.attr(node, attrName, newValue); // setter 

http://dojotoolkit.org/reference-guide/1.6/dojo/attr.html

Если OBJ является Widget:

var val = widget.get(attrName); // getter 

widget.set(attrName, newValue); // setter 

http://dojotoolkit.org/reference-guide/1.8/dijit/_WidgetBase.html

+0

Спасибо, что работает! Также я спрашиваю, можно ли получить идентификатор Dom с помощью функции 'attr'? – Dreamer

Смежные вопросы