プロパティの中に動的にロードされたDOM要素があるクラスを作成しています。この流れの非常に簡単な概要:Javascriptで構築した直後にオブジェクトメソッドを呼び出す
- ウィンドウがロードされている クラス
- サムシング(DOM要素を動的にAJAXを使用してロード(2.1)いくつかの属性、および(2.2)で)作成され
-
:これらのDOMエレメントの特性を有する任意にwindow.addEventListener("load",function(){ // Step 1 someObject = new someClass("element_id") // Step 2.1 someObject.loadToDOMThroughAJAX(function(){ // Step 2.2 someObject.optionalMethodAfterConstruction(); // Step 3 }); })
SomeClass
のオブジェクトが
このように(変換など)行われます10
編集:optionalMethodAfterConstruction()
ためのスニペット:
someClass.prototype.optionalMethodAfterConstruction = function(){
var element = this.element.querySelector(".someClass")
element.setAttribute("transform","translate(20,20)")
}
EDIT2:loadDOMThroughAjax()
ためのスニペット:
someClass.prototype.loadDOMThroughAjax= function(){
obj = this;
var ajax = new XMLHttpRequest();
ajax.open("GET", "/path/to/html", true);
ajax.send();
ajax.onload = function(e) {
obj.element.innerHTML = ajax.responseText
}
}
しかしながら、ステップ3が実行された場合、DOM要素がまだステップ2.2にロードされていません成功したdocument.querySelector()
コールに依存しているため、手順3が失敗します。クラス.someClass
のDOM要素は動的に読み込まれ、そのメソッドが呼び出されるときに存在するはずですが、そうではありません。手動でメソッドを呼び出すと機能します。
私は近くにいるように感じていますが、これを正しく行う方法と欠けていることを知りたいと思います。
コンストラクタ自体をコンストラクタにアタッチすることはできません。コンストラクタはすべてのオブジェクトに適用する必要があります。
jQueryはありません。
'loadToDOMThroughAJAX'がコールバックを持っているようです、そのコールバックが機能していない場合は、その関数が何をしているかを知るために関数をポストする必要があります。 – adeneo
これは、 'querySelector' がライブではないためです。 https://developer.mozilla.org/en/docs/Web/API/Document/getElementsByClassNameの代わりに 'getElementsByClassName'を試してください – Tareq
あなたのコードに何か問題があるかどうかは、あなたが私たちに提示しなければそれを教えてください。 – JLRishe