6

私は、既存の作業コード ベースを取得し、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要素を作成し、次にクラスを指すクラスを持つことは本質的に危険/素朴/無意味ですか? これは循環依存と再帰的な悪夢のように感じますが、おそらくオブジェクトへの参照はそれほどひどいものではありません。私が他に本当に愚かなことをしていて、もっと簡単な方法がある場合は、それも指摘してください。

4

3 に答える 3