mootools を使用して、フォーム オブジェクトを作成し、動的に div を作成する「ビルダー」クラスがあります。一部のフォーム オブジェクトは、複数の異なるオブジェクトで構成されています。たとえば、選択オブジェクトには、セレクターのコンテンツをフィルタリングするテキストボックスと、選択内容を保存するためのボタンがあります。
この場合、「ラッパー」を持つように、フォーム オブジェクト全体の div に追加される div にフィルター ボックスとボタンを配置する必要があります。
ただし、動的に作成されたフォーム オブジェクトの div に追加する際に問題が発生しています。
DOM がロードされた後、「ビルダー」クラスが呼び出されます。
window.addEvent('domready', function()
{
builder = new Build();
});
Builder は新しい div をそのまま作成します
var div = document.createElement('div');
var div_id = 'the_div_id_for_my_form_object';
div.setAttribute('id', div_id);
次に、パラメータの 1 つとして div を受け取るフォーム オブジェクトを作成します。
var form_obj = superSelector(div);
form_obj コンストラクター内で、この div はメンバー変数 this.div = div として保存されます。フィルター テキスト ボックスとボタンが作成されます。
ここで問題が発生します。(フィルターのテキストボックスもボタンも問題は同じなので、テキストボックスの場合だけ説明します)
form_obj の div は、フィルター テキスト ボックスのコンストラクターに渡されます。フィルター テキスト ボックスが作成されると、それ自体の div が作成されます。
var div = document.createElement('div');
var div_id = 'the_div_id_for_my_filter_box';
この div を form_obj の div に追加しようとすると、「null」に追加しようとしているという js エラーが表示されます
var filterBox = new Class({
initialize: function(name, form_obj)
{
this.name = name;
this.div = document.createElement('div');
this.div.setAttribute('id', name);
document.getElementById(form_obj.div).appendChild(this.div);
}
収量:
「キャッチされていない TypeError: null のメソッド 'appendChild' を呼び出せません」
これを回避する方法がわかりません。追加しようとした時点で、追加したい div が存在しないように感じます。ただし、その時点まで「子」divの構築を延期できるように、イベントがいつ存在するかを通知するイベントを生成する方法がわかりません