-2

現在、ハンドルバー テンプレートを div に追加しています。これをコードで使用したい -

test = $(".someClass:onScreen")

そのクラスにマウスを置いたときに同じ行をログに記録し、画面に内容を返すため、onScreenが機能することを知っています。これは、追加先の div にあるものに slideUp() があるために発生しています。これを知っているのは、slideDown() を実行すると、行が正しく内容を返すからです。

どうすればこれを回避できますか? slideUp が終了したときにリッスンできるイベントはありますか?

編集-

Jquery slideUps コールバックも使用してみましたが、まだ役に立ちません -

    @$el.find("#container").slideDown('fast',@appendSearchResults(resultsCollection))
    @$el.find("#container").empty()

  appendSearchResults:(resultsCollection)=>
    @$el.find("#searchContainerId").append(Handlebars.templates["resultsPage"](
      row: resultsCollection.toJSON()
      nResults: resultsCollection.length
      ))
    @genImageToolTip()
    console.log("testing ons creen")
    test = $(".carImageClass:onScreen")
    console.log(test)
4

1 に答える 1

0

jQuery.slideUp()には、アニメーションの終了時に呼び出される完了関数の引数があります。詳細はjQuery docでかなり明確です。

コールバックを渡すときは、関数呼び出しではなく、単純な関数参照を取ります。そこに関数呼び出しを配置すると (その後に括弧を付けて実行させる)、その関数は後で実行されるのではなく、すぐに実行されます。あなたのコードは通常の JavaScript のようには見えないため、どのように機能するかを正確に提案することはできません。通常の JavaScript コールバックは次のようになります。

$("#whatever").slideUp(2000, function() {
   // do whatever you want to do upon completion
});

またはこのように:

$("#whatever").slideUp(2000, slideDone);

function slideDone() {
    // do whatever you want to do upon completion of the slideUp event
}

さらに、jQuery には:onScreen組み込み用のセレクターがありません。プラグインをインストールして、ドキュメントに従って使用している場合は、そのセレクターを提供できるプラグインがあります。


具体的なコードについては、CoffeeScript はわかりませんが、プレーンな JavaScript で関連する例をいくつか紹介します。

あなたはこれを行うことができます:

$el.find("#container").slideDown('fast', function() { 
    appendSearchResults(resultsCollection)
});

function appendSearchResults(resultsCollection) {
    // code here
}

これを行うことはできません:

$el.find("#container").slideDown('fast', appendSearchResults(resultsCollection));

function appendSearchResults(resultsCollection) {
    // code here
}

これはappendSearchResultsをすぐに呼び出し、その関数からの戻り結果を関数ではないslideUpに渡すため、機能しません。引数を取らない関数参照を slideUp に渡す必要があります。

于 2012-09-06T05:52:49.643 に答える