1

Erlang Web フレームワークである Nitrogen では、次のようにアクションを配線します。

wf:wire(send_message, #event { type=click, postback=send_message })

しかし、その後実行すると

wf:wire(send_message, #event { type=click, postback=send_message2 }),

次に、アクションを2回配線します。

要素の前のアクションまたはすべてのアクションをどのように配線解除しますか?

4

2 に答える 2

1

窒素のイベントは jquery の bind メソッドを使用してバインドされているためです。unbind を使用してバインドを解除できます。現在、イベントのバインドを解除する窒素 API はありませんが、必要に応じて JavaScript コードを出力して自分でバインドを解除できます。

バインディング JavaScript がどのように出力されるかの例については、action_event.erlを参照してください。バインディングを削除する同様のアクション/イベントを作成できます。

于 2010-01-03T04:53:41.187 に答える
0

私も「配線なし」を探していましたが、見つかりませんでした。私の回避策は、イベントが配線された要素を wf:replace() し、置換要素を配線することでした。javascript が、以前の bind を呼び出すことができないことに最終的に気付き、それをガベージ コレクションすることを願っています。そのような放棄されたバインディングがどれほど高価かはわかりません。私のコンテキストは、ボタンが最初にスタブを表示するようなページの遅延読み込みでしたが、クリックすると任意に大きなコンテンツがダウンロードされ、それ以降は非表示/表示が切り替わります。

JavaScript ガベージ コレクションの精巧さに神経質になっている以上に、これは悪いパターンではないかと心配しており、他のユーザーの経験を聞きたいと思っています。私が思いつく唯一の代替手段は、状態 (データなど) を元の要素に保持し、その状態をイベント メッセージと共に返すことです。これにより、同じイベント ハンドラーが "unloaded->loaded_show->loaded_hide->loaded_show で動作するようになります。トランジション。しかし、単純な非表示/表示遷移のためにサーバーにコールバックすることは避けたいと思います。

于 2015-05-07T00:21:45.360 に答える