1

ループがあります:

for (index = 0; index < total_groups; index += 1) {

    groups[index].list_item = $(list_item_snippet);

    // Closure to bind the index for event handling
    (function (new_index) {

        groups[index].list_item.find('.listing-group-title')
                               .html(groups[index].Group.Name)
                               .click(function(e){

            fns.manageActiveGroup(new_index, groups);
            return false;
        });

    })(index);

    // Append to DOM
    mkp.$group_listing.append(groups[index].list_item);
};

append()ループが発生するたびに電話をかけたくありません。

文字列を使用して、ループの反復ごとにマークアップを連結し、最後に文字列を追加できることはわかっていますが、mkp.$group_listingこれによりオブジェクトがフラットになり、バインディングが失われます(IDに依存していません)。

おそらく私のオブジェクトを配列に追加し、HTMLにフラット化せずにそれらをすべて一度に下部に追加する方法はありますか?

仮定:

  • $(list_item_snippet)リストアイテムを定義するHTMLが含まれています(クラスを持つ要素が含まれています.listing-group-title)。
  • groupsスクリプトで「グループ」を定義するJSONのブロックです
  • クロージャーは完璧に機能します

編集:

次の構文を使用して複数の要素を追加できることがわかりました。

mkp.$group_listing.append(groups[0].list_item, groups[1].list_item );

しかし、私は明らかにそれを自動化する必要があります-それは配列ではなく、単なるオプションの追加関数パラメーターであるため、これを行う方法がわかりません。

4

3 に答える 3

4

要素の配列をセレクターに追加するには、次を使用できます。

$.fn.append.apply($sel, myArray);

あなたの場合、実際に必要なのは各配列要素のプロパティなので、最初にそれらを抽出するために.list_item使用できます。$.map

$.fn.append.apply(mkp.$group_listing, $.map(groups, function(value) {
     return value.list_item;
}));
于 2012-11-04T14:32:39.293 に答える
0

これまでのようにバインドするのではなく、on()以下のようにバインドすると、

$(document).on('click', '.listing-group-title', function() {
    // click handler code here
});

HTMLをフラット化して、1つのステートメントに追加しても、引き続き機能します。

注:document効率を上げるには、上記のステートメントで、の最も近い親に一致するセレクターに置き換えます。.listing-group-title

于 2012-11-04T13:55:48.550 に答える
0

はい。jQueryaddメソッドを使用して、すべてのアイテムをjQueryオブジェクトに追加します。次に、その1つのオブジェクトを追加します。

http://api.jquery.com/add/

編集:例:

var arr = $();

for (index = 0; index < total_groups; index += 1) {

    groups[index].list_item = $(list_item_snippet);

    // Closure to bind the index for event handling
    (function (new_index) {
        ...
    })(index);

    // Add to jQuery object.
    arr.add(groups[index].list_item));
};

mkp.$group_listing.append(arr);
于 2012-11-04T14:07:02.243 に答える