0

私はBackboneJSを初めて使用し、ビューの1つにスライドショーがある小さなアプリに取り組んでいます。スライドショーを開始するコードをビューのどこに配置するかわかりません。

SlidesJSを使用していますが、このコードをどこにスローするのか疑問に思っています。

$("#slides").slides();

jQuery対応ハンドラー(BackboneJSアプリの外部)内に配置すると、スライドショーが1回だけ実行され、ビューが再レンダリングされるときに自然に機能しなくなります。

何らかの理由で、ビューのレンダリング関数内にコードを配置した場合も、機能しません(そして、それが良い考えかどうか疑問に思います)。

render: function() {
    this.$el.html(this.template());
    this.$("#slides").slides();
    return this;
}

SlidesJSまたはBackboneJSのようなjQueryツールを実装するのに最適な場所はどこですか?

ありがとう!

4

1 に答える 1

1

SlidesJSは、処理を実行する前にすべてをレンダリングし、DOMで処理する必要があるようです。これは、スライドを並べるためにサイズと位置の情報が必要なためと考えられます。私はGoogleマップで同様の問題を抱えていましたが、解決策は、ビューがDOMに追加されるまでバインディングを延期することでした。el

var $slides = this.$(...);
setTimeout(function() {
    $slides.slides()
}, 0);

その後、発信者は次のようになります。

$something.append(v.render().el);

ゼロタイムアウトで使用setTimeoutすることは、ブラウザーが制御を取得してDOMを更新した後に何かを実行するためのトリックです。また、使用することができます_.defer

_(function() { $slides.slides() }).defer();

しかし、それはただの空想的な呼び出し方法ですsetTimeout

このアプローチの欠点は、呼び出し元がビューを呼び出し、renderすぐにelDOMに追加することを想定していることです。これはそれほどマイナス面ではありませんが、x.append(v.render().el)標準的なバックボーンの使用法です。

この種のことは少し厄介なにおいがしますが、それはかなり安全であり、時には問題を回避する必要があります。

于 2012-10-22T21:50:31.200 に答える