私は、既存の作業コード ベースを取得し、JavaScript を使用してオブジェクト指向にしようとしています。私のシステムは、1 対多の関係にあるグループとアイテムを含む JSON を取得し、これをページ上で視覚化します。アイテムは別のグループに移動でき、それらのグループ内での位置も計算する必要があります。そのため、グループとその周りのチケットの両方を認識するイベントを確立する必要があります。
John Resig の単純な JavaScript 継承セットアップを使用して、2 つのクラスを確立していItem
ますGroup
。それぞれItem
がインスタンス化されると、その親を参照しGroup
ます。私の問題は、イベントを確立したいときに発生し、次の関数で最も簡単に説明できます。
var Group = Class.extend({
...
// Calculate where to place the new item within the group
calculate_new_position: function(item) {
var pos = -1;
// Loop through all DOM items in groups body
$(".item", this.elBody).each(function(i) {
// Retrieve it's class object
var next = $(this).data("_obj");
// Calculating things using the class reference
var lowerPrio = item.tData.priority < next.tData.priority,
lowerId = item.id < next.id;
if(lowerPrio || lowerId) {
pos = i;
return false;
}
});
return pos;
},
...
)};
.data("_obj")
上記のスニペットでの使用に注意してください。基本的に、アイテムの並べ替えなどを行う必要がある場合、グループ内のすべてのアイテムの DOM (ビュー/コントローラー) に対応するオブジェクト (モデル) を知る必要があります。Group
これで、クラスを確立して、それぞれを作成するときにItem
自分の内部から参照を追加しGroup
(例: so Group.items = [i1, i2...]
)、DOM 要素を反復するのではなく、Item
インスタンスを反復できるようになりました。Item
ただし、 を別の に移動したい場合など、後で同様の問題に遭遇すると思いますGroup
( はGroup
について知らないためItem
)。
簡単に言うと、インスタンス化されたときにDOM要素を作成し、次にクラスを指すクラスを持つことは本質的に危険/素朴/無意味ですか? これは循環依存と再帰的な悪夢のように感じますが、おそらくオブジェクトへの参照はそれほどひどいものではありません。私が他に本当に愚かなことをしていて、もっと簡単な方法がある場合は、それも指摘してください。