0

属性値を変更できる Dojo 1.6 で Dojo 関数を作成しています。

    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')+']');
        }
    }

コードをトレースし、この行で失われた firebug を見つけます

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()正常に機能するのに、どうしてこれが可能になるのでしょうか?

4

1 に答える 1

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 がウィジェットの場合:

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

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

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

于 2013-03-20T19:25:26.370 に答える