3
Kunci Takeaways
KnockoutJS menawarkan pelbagai pengikatan terbina dalam yang memudahkan proses menghubungkan elemen UI ke model data, menjadikannya mudah untuk membuat UI dinamik dan responsif.
Jika anda memahami cara menggunakan satu jenis data yang mengikat, maka yang lain harus cukup mudah untuk dipelajari. Sekarang kita akan menerangkan setiap satu daripada mereka dengan memberikan keterangan dan contoh pendek.
pengikatan mudah
// syntax: data-bind="bindingName: bindingProperty" <span data-bind="text: msg"></span>
Kami telah melihat teks mengikat ketika berurusan dengan pemerhatian dalam tutorial sebelumnya. Ia menetapkan teks elemen yang berkaitan dengan nilai parameter anda. Ini adalah bersamaan dengan menetapkan innertext (untuk IE) atau teksten (untuk pelayar lain) harta elemen DOM. Jika parameter anda adalah sesuatu yang lain daripada nombor atau rentetan maka pengikatan akan memberikan hasil toString () ke elemen.
Jika parameter ini adalah nilai yang dapat dilihat, pengikatan akan mengemas kini teks elemen apabila nilai berubah. Jika parameter tidak dapat dilihat, ia hanya akan menetapkan teks elemen sekali dan tidak akan mengemas kini lagi kemudian. Ini sah untuk semua pengikatan.
Pengikatan teks sering digunakan untuk memaparkan nilai dalam elemen rentang atau div. Apabila ia digunakan, mana -mana teks terdahulu akan ditimpa.
// syntax: data-bind="bindingName: bindingProperty" <span data-bind="text: msg"></span>
Pengikatan nilai menetapkan nilai elemen yang berkaitan dengan nilai parameter anda. Ini biasanya digunakan untuk elemen borang seperti input, pilih dan teks. Apabila pengguna menyunting nilai dalam kawalan borang yang berkaitan, ia mengemas kini nilai pada model pandangan anda. Begitu juga, apabila anda mengemas kini nilai dalam model pandangan anda, ini mengemas kini nilai kawalan borang pada skrin. Ini dikenali sebagai mengikat dua hala. Jika parameter anda adalah sesuatu yang lain daripada nombor atau rentetan maka pengikatan akan memberikan hasil toString () ke elemen.
Secara lalai, knockout mengemas kini model paparan anda apabila pemindahan pengguna memberi tumpuan kepada node DOM yang lain, pada acara Perubahan, tetapi anda boleh mengawal apabila nilai dikemas kini menggunakan parameter ValueUpdate yang diterangkan di bawah. Jika mengikat anda juga termasuk parameter yang dipanggil ValueUpdate, ini mentakrifkan knockout acara pelayar yang harus digunakan untuk mengesan perubahan.
"Tukar" adalah peristiwa lalai dan ia mengemas kini model pandangan anda apabila pengguna menggerakkan fokus ke kawalan yang berbeza, atau dalam kes
"keyup" - mengemas kini model pandangan anda apabila pengguna mengeluarkan kunci
"KeyPress" - mengemas kini model pandangan anda apabila pengguna telah menaip kunci. Kemas kini ini berulang kali jika pengguna memegang kunci ke bawah
<span data-bind="text: msg, visible: toggle"></span>
Oleh kerana pengikatan ini menetapkan kandungan elemen anda menggunakan innerHTML, anda harus berhati -hati untuk tidak menggunakannya dengan nilai model yang tidak dipercayai, kerana itu mungkin membuka kemungkinan serangan suntikan skrip. Sekiranya anda tidak dapat menjamin bahawa kandungan itu selamat untuk dipaparkan, maka anda boleh menggunakan teks yang mengikat sebaliknya.
// syntax: data-bind="bindingName: bindingProperty" <span data-bind="text: msg"></span>
Walaupun knockout mempunyai banyak pengikatan terbina dalam, anda pasti akan menghadapi beberapa situasi yang tidak ada. Bagi mereka, Knockout menawarkan pengikatan ATTR, yang membolehkan anda mengikat sebarang atribut kepada harta model pandangan. Parameter harus menjadi objek JavaScript di mana nama harta adalah atribut dan nilai harta adalah nilai yang akan terikat kepada atribut. Ini sangat berguna dalam banyak senario biasa, seperti mengikat HREF dan tajuk elemen A atau SRC dan alt elemen IMG.
<span data-bind="text: msg, visible: toggle"></span>
anda boleh mengikat gaya dengan kalah mati menggunakan CSS dan gaya bindings terbina dalam.
CSS mengikat menetapkan satu atau lebih kelas CSS untuk elemen yang berkaitan. Parameter harus menjadi objek JavaScript di mana nama harta sesuai dengan kelas CSS yang dikehendaki dan nilai harta yang dinilai kepada benar atau palsu yang menunjukkan sama ada kelas harus digunakan. Anda boleh menetapkan beberapa kelas CSS sekaligus.
<p>The tip of the day is: <span data-bind="text: tipOfTheDay"></span></p> function viewModel() { var self = this; self.tipOfTheDay = ko.observable('Relax.Take it easy!') }; ko.applyBindings(new viewModel());
anda boleh menggunakan ungkapan untuk menentukan bila kelas akan digunakan.
<input data-bind="value: name, valueUpdate: 'afterkeydown'"></input> <p data-bind="text: name"></p> function viewModel() { var self = this; self.name = ko.observable() }; ko.applyBindings(new viewModel());
Walaupun lebih baik menggunakan kelas CSS apabila mungkin, kadang -kadang anda mungkin mahu menetapkan gaya tertentu juga. Knockout menyokong ini dengan gaya terbina dalam gaya yang menetapkan satu atau lebih nilai gaya untuk elemen yang berkaitan. Parameter harus menjadi objek yang sifatnya sesuai dengan nama gaya CSS, dan nilai -nilai sesuai dengan nilai gaya yang ingin anda gunakan. Biasanya nilai parameter ini diisytiharkan menggunakan JSON.
<div data-bind="html: markup"></div> function viewModel() { var self = this; self.markup = ko.observable('<p><strong>Knockout</strong> is so <em>cool</em>!</p>') }; ko.applyBindings(new viewModel());
Nota: Apabila anda mempunyai kelas atribut atau CSS yang namanya bukan nama pembolehubah JavaScript yang sah maka anda harus membungkus nama pengenal dalam petikan supaya ia menjadi rentetan literal. Dan jika anda ingin memohon gaya yang namanya bukan pengenal JavaScript yang sah, anda mesti menggunakan nama JavaScript untuk gaya itu.
<img data-bind="attr: {src: url, alt: details}" /> function viewModel() { var self = this; self.url = ko.observable(images/logo.png) self.details = ko.observable('This is logo') }; ko.applyBindings(new viewModel());
Knockout menyokong mengikat apa-apa peristiwa melalui acara terbina dalamnya. Ia menambah pengendali acara untuk peristiwa yang ditentukan ke elemen DOM yang berkaitan. Anda boleh menggunakannya untuk mengikat mana -mana peristiwa HTML yang ditakrifkan. Di dalam pengendali acara anda, anda boleh mengakses item data model paparan semasa, objek acara, atau parameter tersuai yang diluluskan sebagai sebahagian daripada peristiwa yang mengikat. Untuk menggunakan mengikat acara, anda lulus objek literal yang mengandungi pasangan nilai nama untuk nama acara dan kaedah model paparan, dipisahkan oleh koma.
<style> .colorize {color: red} </style> <p data-bind="css: { colorize: on }">Text</p> function viewModel() { var self = this; self.on = ko.observable(true) }; ko.applyBindings(new viewModel());
Klik mengikat, seperti yang anda boleh meneka, mengendalikan acara klik. Kerana ia adalah mengikat yang paling banyak digunakan untuk acara, ia hanya satu jalan pintas untuk mengikat acara.
// syntax: data-bind="bindingName: bindingProperty" <span data-bind="text: msg"></span>
Hantar pengikatan adalah pintasan untuk mengendalikan acara penyerahan untuk elemen borang. Apabila anda menggunakan pengikatan yang mengikat pada borang, kalah mati akan menghalang tindakan lalai penyemak imbas untuk borang itu. Dengan kata lain, penyemak imbas akan memanggil fungsi pengendali anda tetapi tidak akan menyerahkan borang kepada pelayan. Ini adalah lalai yang berguna kerana apabila anda menggunakan pengikatan hantar, biasanya kerana anda menggunakan borang sebagai antara muka kepada model pandangan anda, bukan sebagai borang HTML biasa. Sekiranya anda ingin membiarkan borang itu menyerahkan seperti borang HTML biasa, hanya kembali dari pengendali hantar anda.
Daripada menggunakan hantar pada borang, anda boleh menggunakan klik pada butang hantar. Tetapi dengan menggunakan pengikatan yang memberi anda manfaat menggunakan cara alternatif untuk menyerahkan borang, seperti menekan kekunci Enter semasa menaip ke dalam kotak teks.
Pengikatan yang kelihatan menetapkan penglihatan elemen yang berkaitan berdasarkan nilai parameter yang mengikat. Percubaan mengikat untuk menukar mana -mana parameter kepada nilai boolean. Pengikatan yang kelihatan kalah mati harus terikat kepada harta yang menilai benar atau palsu. Ini mengambil keutamaan atas sebarang gaya paparan yang telah anda tentukan menggunakan CSS.
<span data-bind="text: msg, visible: toggle"></span>
Enable/Lumpuhkan Mengikat Menetapkan Atribut Dilumpuhkan pada Elemen Berkaitan berdasarkan nilai yang dibekalkan. Ini biasanya digunakan untuk elemen borang seperti input, pilih dan teks. Knockout menyediakan pengikatan terbina dalam untuk membolehkan dan melumpuhkan elemen input. Mengaktifkan pengikatan akan membolehkan elemen input jika harta itu terikat untuk menilai benar, dan akan melumpuhkan elemen jika ia menilai palsu. Pengikatan yang disable tidak tepat bertentangan
<p>The tip of the day is: <span data-bind="text: tipOfTheDay"></span></p> function viewModel() { var self = this; self.tipOfTheDay = ko.observable('Relax.Take it easy!') }; ko.applyBindings(new viewModel());
Knockout mempunyai pengikat terbina dalam yang bernama Hasfocus yang menentukan dan menetapkan elemen yang mempunyai tumpuan. Pengikatan hasfocus berguna apabila anda mahu fokus ditetapkan ke elemen tertentu dalam bentuk contoh borang carian apabila pelawat membuka halaman
<input data-bind="value: name, valueUpdate: 'afterkeydown'"></input> <p data-bind="text: name"></p> function viewModel() { var self = this; self.name = ko.observable() }; ko.applyBindings(new viewModel());
kotak semak boleh menjadi data yang terikat kepada pengikatan yang diperiksa. Pengikatan yang diperiksa harus terikat kepada harta atau ungkapan yang menilai benar atau palsu. Kerana sifat model paparan ditakrifkan sebagai pemerhatian, kotak semak dikemas kini apabila sumber harta berubah. Begitu juga, apabila pengguna memeriksa atau melepaskan kotak semak, nilai itu dikemas kini dalam harta model View. Pengikatan ini menetapkan keadaan butang radio dan kotak semak yang diperiksa. Untuk kotak semak, percubaan mengikat untuk menukar mana -mana parameter ke dalam nilai boolean. Untuk butang radio, pengikatan membandingkan atribut nilai butang ke parameter mengikat.
// syntax: data-bind="bindingName: bindingProperty" <span data-bind="text: msg"></span>
Senarai dropdown mempunyai beberapa sifat penting untuk memuatkan senarai item, memaparkan nilai, menggunakan nilai kunci yang berbeza dan simpan pemilihan pengguna. Knockout menyediakan pengikatan terbina dalam untuk setiap ini. Pilihan mengikat menetapkan pilihan yang akan muncul dalam elemen senarai drop-down. Nilai harus menjadi array. Pengikatan ini tidak boleh digunakan dengan apa -apa selain daripada
Pilihan mengikat mengenal pasti senarai nilai untuk dipaparkan, biasanya dari harta array pada model paparan.
<span data-bind="text: msg, visible: toggle"></span>
Kawalan mengikat terpilih yang elemen dalam senarai multi-pilih kini dipilih. Apabila pengguna memilih atau memilih item dalam senarai pelbagai pilihan, ini menambah atau membuang nilai yang sepadan dengan array pada model pandangan anda.
<p>The tip of the day is: <span data-bind="text: tipOfTheDay"></span></p> function viewModel() { var self = this; self.tipOfTheDay = ko.observable('Relax.Take it easy!') }; ko.applyBindings(new viewModel());
Kadang -kadang anda ingin memaparkan satu nilai dalam senarai dropdown tetapi gunakan nilai lain apabila pengguna memilih item dari senarai. Bantuan OpsyenStext dan OptionValue Knockout. Pengikatan OpsyenStext ditetapkan ke nama rentetan harta untuk dipaparkan dalam senarai dropdown, dari pilihan mengikat. Pengikatan optionsValue ditetapkan ke nama rentetan harta untuk mengikat untuk nilai yang dipilih item dalam senarai dropdown. OptionsCaption berguna apabila anda tidak mahu mempunyai pilihan prtikular yang dipilih secara lalai. Parameter ini menetapkan teks seperti 'Pilih item ...' di atas senarai pilihan dan tunjukkannya apabila tidak ada item tertentu yang dipilih.
<input data-bind="value: name, valueUpdate: 'afterkeydown'"></input> <p data-bind="text: name"></p> function viewModel() { var self = this; self.name = ko.observable() }; ko.applyBindings(new viewModel());
Dan itu semua untuk bahagian ini, tunggu untuk perlawanan akhir, masa yang sama minggu depan!
Bagaimana saya boleh menggunakan knockoutjs dengan teknologi sebelah pelayan?
Atas ialah kandungan terperinci Panduan Pemula untuk Knockoutjs: Bahagian 2. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!