1

リスト内のアイテムごとにサブビューを作成するビューがあります。一般的に、それらをListViewおよびListItemViewと呼びましょう。ListItemViewに次のようなイベントを添付しました。

events: {
    "click .remove": "removeItem"
}

ListItemViewのテンプレートで生成されたhtmlは、ほぼ次のようになっています(lb / rbを{/}に置き換えたため、「違法な」htmlが表示されます)。

{div class = "entry" data-id="this_list_item_id"}ここにいくつかのスタッフ
{ divclass
= "meta"}
{a class = "remove" href = "javascript :;"} [x] {/ a}
{/ div}
{/ div}

問題は、[x]のいずれかをクリックすると、すべてのListItemViewがremoveItem関数をトリガーすることです。このモデルのIDから外れる場合は、ページ上のすべてのアイテムを削除します。クリックしたアイテムの親の親要素から離れてデータIDを取得すると、各ListItemViewインスタンスが削除されます。単一のremoveItemのみをトリガーするインスタンス固有のイベントを作成する方法はありますか?

ListViewにListItemViewの単一インスタンスを保持させ、ListItemモデルを再割り当てして、リスト内の各アイテムに対してレンダリングする場合、それは機能します。1つのアクション(removeItem)がトリガーされるだけです。問題は、データID属性を見つけるために、クリックターゲットの親の親を見つける必要があることです。個人的には、以下のスニペットはかなり醜く、より良い方法が必要だと思います。

var that = $($(el.target).parent()).parent();

誰かが与えるどんな助けも大いに感謝されるでしょう。

4

2 に答える 2

1

eventsハッシュがListViewにあるようです。

eventsそうである場合は、ハッシュをListItemViewに移動でき、removeItem関数は次のようになります。

removeItem: function() {
  this.model.collection.remove(this.model);
}

そうでない場合は、ListViewとListItemViewのコードを提供してください。

于 2012-01-04T22:38:32.613 に答える
0

野蛮な推測ですが、可能です。レンダリングされたhtmlが有効であることを確認してください。不正な形式のhtmlが原因で、DOMがtizになっている可能性があります

于 2012-01-05T22:48:25.343 に答える