Apakah ScrollSpy Twitter Bootstrap saya mencoba memata-matai elemen yang tidak seharusnya dimata-matai?

Saya menggunakan BackboneJS dan Bootstrap, dan saya mencoba mengaktifkan scroll spy pada beberapa konten setelah pengunjung mengklik tombol.

Jadi ketika pengguna mengklik tombol itu, ini akan dijalankan:

$('#frontPageNav').css('display', 'block'); // It was hidden on load
$('#frontPageNav').scrollspy(); // Activate scrollspy, this is where the error happens
$('[data-spy="scroll"]').each(function () {
  var $spy = $(this).scrollspy('refresh'); // I think this is not needed because nothing was invisible before
});
$('#frontPageNav li').on('activate', function () { // This never gets emitted
  alert('activate!');
});

Dan konten yang ingin saya lihat ditempatkan seperti ini:

<div data-spy="scroll" data-target="#frontPageNav">
  <div id="home-top" class="row slide">
  </div>
  <div id="home-how" class="row slide">
  </div>
  <div id="home-join" class="row slide">
  </div>
</div>

Tidak ada elemen lain di halaman yang memiliki atribut data-spy, jadi menurut saya ini seharusnya satu-satunya konten yang dimata-matai, tetapi ternyata tidak: Saat memuat halaman saya mendapatkan kesalahan, Uncaught TypeError: Cannot read property 'top' of null, yang berarti plugin scrollspy sedang mencoba menemukan $.position() dari elemen yang tidak ada. Saya mengaktifkan rem pengecualian di alat pengembang Chrome, dan pengecualian yang tidak tertangkap ada di baris 454 dari bootstrap.js, yaitu && [[$href.position().top, href]]) || null dan jika saya mengarahkan kursor ke href, pemilihnya adalah untuk elemen yang tidak saya miliki di markup saya, tetapi Saya memiliki tautan ke hash dengan itu.

Apakah ini berarti plugin scrollspy menganggapnya seharusnya memata-matai semua tautan dengan href="/id#something" dan menemukan elemen markup dengan ID itu? Mengapa tindakan mata-mata tidak tetap dilakukan pada elemen dengan data-spy="scroll" ?


person João Pinto Jerónimo    schedule 23.07.2012    source sumber


Jawaban (1)


Dengan melampirkan plugin ScrollSpy ke elemen tertentu, plugin akan mendengarkan peristiwa gulir pada elemen tersebut. Namun, plugin menggunakan opsi target untuk menentukan tautan mana yang memenuhi syarat untuk diaktifkan. Kecuali jika target diberikan secara eksplisit, plugin ScrollSpy akan mengikis keseluruhan isi untuk tautan yang cocok dengan pemilih '.nav li > a'. Dengan memberikan target, pemilih akan menjadi target + ' .nav li > a', sehingga membatasi penelusuran hanya dalam target.

API mendukung spesifikasi melalui markup menggunakan data-target, serta meneruskannya sebagai opsi dalam panggilan JavaScript $('#myElement').scrollspy({target: '#myTarget'});.

Penjelasan lebih lengkap tentang cara kerja plugin ScrollSpy dapat ditemukan di jawaban untuk Bagaimana cara mengaktifkan tautan untuk komponen Twitter Bootstrap Affix?

person merv    schedule 30.08.2012