Anda mengaktifkan Javascript-StringBuilder karena Penggabungan dengan + = tidak dipotong

ini StringBuilder saya. Ada banyak seperti itu, tapi ini adalah milikku.

ehem. Oh ya, StringBuilder. Mengapa Anda perlu alat untuk membantu membangun jaringan? Karena campuran banyak string menggunakan + = benar-benar tidak efektif. Mendorong array ke string, dan kemudian datang bersama-sama dalam matriks akhir jauh lebih cepat.
Untuk analisis menarik dari perbedaan dalam kinerja, memeriksa posting ini oleh Josh Powell.

Untuk titik. Untuk memudahkan menambahkan untuk bergabung dan pengaturan string, saya membuat versi dari kelas NET StringBuilder JavaScript. Ini dia:

 var = {alat getStringBuilder: function () {var Data = []; var counter = 0; {// Menambahkan string kembali aneksasi StringBuilder adalah: function (s) data {[kontra ++] = s; kembali ini; } // Hapus item dari itu, dan jika satu atau dihilangkan penghapusan j: fungsi (i, j) {data.splice (i, j || 1); kembali ini; } // Tambah rantai dan masukkan di Inggris: fungsi (i, dan) {data.splice (0, s); kembali ini; } // ToString untuk memasok: peran (s) {kembali data.join (dan || & amp; amp; quot; & amp; quot;); kembali ini; }}; }}; 

"Tools" item serta pendapat kemungkinan mereka, adalah di mana saya ingin menyimpan fitur saya yang paling berguna seperti ini. Penggunaannya cukup sederhana:

 var SB = tools.getStringBuilder (); sb.Append (& amp; quot; adalah & amp; quot;); sb.Append (& amp; quot; Tidak & amp; quot;); sb.Append (& amp; quot; teman & amp; quot;); sb.ToString var salam = (); 

Atau jika Anda benar-benar menyukai gaya jQuery metode chaining:

 ucapan var = tools.getStringBuilder () Append (& amp ; quot; adalah & amp; quot;) Append (& amp; quot; Tidak & amp; quot;) Append (& amp; quot; teman & amp; quot;) .ToString (); 

Dan hanya itu!

(Ya, saya menyadari bahwa saya bukan yang pertama untuk menulis StringBuilder JavaScript. Tapi tidak seperti ini, jadi saya akan blog pula).


Model VisualStateManager menggunakan Model-View-ViewModel (MVVM) WPF atau Silverlight

Visual Negara Manager adalah tambahan yang kuat WPF 4,0 memfasilitasi penanganan visual negara untuk WPF dan Silverlight kontrol. Sebagai contoh, mungkin ada negara kunci ÄúPressed, ÄúNormal ,, pemantauan, pelacakan ,, ÄúDisabled, burung, dll, dan terlihat berbeda untuk masing-masing negara-negara ini dengan transisi antara mereka. Jika, Aore akrab dengan Visual Negara Manager, periksa review atau ScottGu Visual Negara Manager, mailing tahun.

Visual Negara Manager adalah sudah bagian dari Silverlight 2, dan akan berada di WPF 4.0. Anda bisa, bagaimanapun, menggunakannya jika Anda men-download WPF Toolkit resmi.

Sekarang, sebaik VisualStateManager ( VSM ) adalah siapa saja yang mencoba untuk menggunakan Model-View-ViewModel (MVVM) atau Model Lihat-presenter (MVP) telah mengalami beberapa masalah. Perubahan besar adalah bahwa pernyataan sensasional VSM, Anda harus lulus mata sebagai argumen:

 VisualStateManager.GoToState (Lihat, statename, true); 

Jika, Aore menggunakan MVP pola, tidak apa-apa, karena host Anda mungkin akan menyadari layar. Misalnya, jika Anda, Aore menggunakan Caliburn (yang, kebetulan, adalah kerangka mengagumkan MVP dan MVVM ), Anda dapat melakukan sesuatu seperti ini:

Lihat fasilitas pribadi {get; set; } Kekosongan Umum menggantikan ViewLoaded (melihat objek, konteks objek) {view = lihat; base.ViewLoaded (sight, konteks); } Swasta kekosongan ChangeStateTo (statename string) {Application.Current.Dispatcher.Invoke ((System.Action) (delegasi () {VisualStateManager.GoToState ((kontrol) Lihat, statename, true);}), NULL); }

Ini bekerja sangat baik. Tetapi jika Anda, Aore dengan MVVM isn ini, AOT benar-benar solusi karena pandangan model perlu tahu tentang layar. Juga, idealnya, itu akan menghubungkan milik negara ODA menghadap visual yang presenter / model. AS juga diuji bagaimana ini akan sulit.

Solusinya terletak pada tahun WPF melekat sifat (ooh, lakukan, AOT kita menyukainya?). Kami, Äôll membantu menciptakan depencency VisualState properti kelas, dan PropertyChangedCallback metode untuk properti ini, Äôll menghabiskan pengirim (yang akan menjadi sudut pandang kita) dan nilai aktiva tetap yang baru (yang merupakan nama negara) untuk VisualStateManager

 StateManager public class: DependencyObject {public static string GetVisualStateProperty (DependencyObject OBJ) {return (string) OBJ. GetValue (VisualStatePropertyProperty); } Public void SetVisualStateProperty (DependencyObject OBJ, nilai string) {obj.SetValue (VisualStatePropertyProperty, nilai); } Readonly statis Umum DependencyProperty VisualStatePropertyProperty = DependencyProperty.RegisterAttached (& amp; amp; quot; & amp; amp; quot;, VisualStateProperty typeof (string), typeof (StateManager) PropertyMetadata baru ((a, a) = & amp; amp; gt ; {var propertyName = (string) e.NewValue; Ctrl var S = seakan kontrol (Ctrl == NULL) membuang InvalidOperationException baru (& amp; quot; properti yang melekat ini hanya kompatibel dengan jenis kontrol derivatif & amp; amp; quot ;.) sistem .Windows.VisualStateManager.GoToState (Ctrl (string) e.NewValue, true);})); } 

Sekarang XAML dapat memaksa rantai properti VisualStateName dalam model kami untuk melihat kelas baru kami bantuan:

 & amp; amp; lt; UserControl X: class = & amp; amp; quot; MyApp.SomeView & amp; amp; quot; // Namespaces MyApp dihilangkan untuk singkatnya: StateManager.VisualStateProperty = & amp; amp; quot; VisualStateName} {Binding & amp; amp; quot; & Amp; Amp; gt; 

Bahwa aku, tahun! Jenis kami bantuan Perubahan terlihat bagi kita. Model tidak harus dilihat sebagai negara melihat dan test drive menjadi lebih mudah

Menulis cek rinci harus mati!

Sejak membuat transisi ke dunia WPF, saya menemukan diri saya melakukan jenis memeriksa lebih dan lebih, terutama ketika menggunakan MVVM (Model-View-ViewModel) dan MVP (Lihat – Presenter Mode) pola. Alasan utama adalah sifat samar-samar ditulis Data WPF mengikat

kami kode presenter / model diisi dengan fragmen terlihat seperti ini:

 Jika (OBJ adalah SomeObject) {var = someObject (SomeObject) OBJ; someObject.SomeProperty = true; // Atau apa pun yang Anda ingin lakukan} 

EW. Menulis benda uji data, dan kemudian mencuci. Lagi dan lagi.

Saya percaya bahwa setiap kali menulis baris kode yang saya tulis hanya beberapa menit sebelumnya, ini adalah tugas Anda untuk berhenti sejenak dan untuk menentukan apakah mungkin ada cara yang lebih baik melakukan hal ini. Dan tentu saja, ada, dengan sedikit bantuan dari metode penyuluhan dan C # generik:

 public static Ekstensi class {public static myDataObject DoIfType & amp; amp; lt; T & amp; amp; gt; (OBJ myDataObject ini, Action & amp; amp; lt; T & amp; amp; gt; action) di mana T: myDataObject {if (OBJ T) {Aksi ((T) OBJ); } Kembali OBJ; }} 

Berikut "myDataObject" adalah kelas dasar untuk semua objek data kami.

Hal ini memungkinkan kita untuk mengulang fragmen pertama seperti ini:

 obj.DoIfType & amp; amp; lt; SomeObject & amp; amp; gt; (S = & amp; amp; gt; s.SomeProperty = true); 

Atau jika tujuannya adalah untuk memindahkan SomeObject metode lain:

 obj.DoIfType & amp; amp; lt; SomeObject & amp; amp; gt; (AnotherMethod); 

Serenity akhirnya! Saya pikir itu lebih bersih dan lebih mudah dibaca kode yang kami mulai.


Peristiwa-peristiwa global dengan jQuery

Kelompok lain jQuery ditanya apakah Google dapat menggunakan peristiwa-peristiwa global dengan unsur-unsur individu jQuery , dan telah mendengar peristiwa tersebut. Skenario A bisa memperbarui div konten dipicu ketika terjadi perubahan global.

Ini tentu saja mungkin, tetapi solusi ini tidak mungkin cukup jelas. Seperti yang Anda tahu, Anda dapat menggunakan jQuery untuk memicu peristiwa pemicu untuk setiap objek. Cara termudah adalah dengan hanya menerapkan peristiwa-peristiwa global memicu acara untuk mendokumentasikan dunia:

 $  (document) .trigger (& amp; amp; Quot; myCustomEvent & amp; quot;); 

Dan kemudian mendengarkan mengikat ()

 $  (document) .bind (& amp; Quot; fungsi myCustomEvent & amp; amp ; Quot; () {// kode yang akan dijalankan ketika acara menyebabkan}); 

Putar objek dokumen global sedikit berantakan, namun, dan bahkan mungkin membuat Doug Crockford pulang dan memukulinya dengan tongkat. Cara terbaik adalah dengan menggunakan objek untuk mengadakan acara mereka, app.eventHolder, atau apa pun yang Anda merasa seperti itu memanggil.

Namun elemen individual mendengar peristiwa-peristiwa global tidak sulit, tetapi tidak ada karya yang didedikasikan untuk dia, dan menentukan sejauh mana itu bisa rumit. Saya melakukan sedikit bantuan untuk pengaya ini:

 $  .fn.bindToGlobalEvent = function (EventName, func) {$  (app.eventHolder) .bind (EventName Fitur ini (i) {func.call (e.data);}); 

Itu semua yang diperlukan, benar-benar. Dengan plugin ini, mereka dapat, misalnya, memiliki div konten saat perubahan global bahkan melepaskan:

. $  (& Amp; Quot; # someDiv & amp; Quot;) bindToGlobalEvent (& amp; Quot; fungsi myCustomEvent & amp; amp; Quot; () {$  (ini) html (& amp; Quot; update dan Quot;);}); 

Metode cerita bersambung JQuery dan Casillas

metode skrip jQuery berguna ketika Anda ingin mengkonversi nilai dari bentuk permintaan URL string disandikan standar sebagai berikut:

 $  (& amp; Quot ; # myform & amp; Quot;) record ().; // "A = 1 & amp; amp; amp; b = 2 & amp; amp; amp;. C = tiga 

Namun, hanya kontrol sukses termasuk dalam string pencarian ini berarti bookmark tidak bisa serial seperti yang seharusnya muncul Casillas control hanya mengandung nama dan kotak dicentang tidak disertakan sama sekali Jadi, sementara Anda dapat mengharapkan sebagai aplikasi:..

 'CheckBox1 = true & amp; amp; amp; checkbox2 = false 

Apa yang sebenarnya Anda dapatkan adalah:

 'CheckBox1 =' 

Kadang-kadang Anda ingin tipe string nyata / palsu, meskipun ada suplemen. yang menggantikan rekor jQuery standar kembali hanya itu:

function (($ ) {$ .fn.serialize = function (pilihan) {return $ .PARAM (this.serializeArray (pilihan));}; $ .fn.serializeArray = function (pilihan) {var o = $ .extend ({checkboxesAsBools: false}, {} || pilihan); var = rselectTextarea / pilih | bidang teks / i; var = rinput / teks | tersembunyi | Password | menemukan / i; this.map kembali (function () {kembali $ this.elements .makeArray (this.elements):?. ini;}) filter (function () {kembali this.name & amp; amp; & amp; amp; amp ;! this.disabled & amp; amp; & amp; amp; (this.checked || (o.checkboxesAsBools & amp; amp; & amp; amp ;; === tes (this.nodeName) || rinput.test (this.type)) this.type “kotak”) || . rselectTextarea;}) .map (function (dan ELEM) {var val = $ (ini) val (); pulang val == null nol: $ .isArray (Januari) $ .map (fungsi Val (ok, aku? ) {return {nama: elem.name, nilai: Val};}) {nama: elem.name, nilai: (o.checkboxesAsBools & amp; amp; amp; & amp; Amp; amp; this.type = == “kotak “?!) // Tiga Moar (This.checked” benar “:” false “): Val};? }). Dapatkan (); }; }) (JQuery);

Plugin ini didasarkan pada naskah jQuery sebenarnya sehingga sebagian besar adalah kode saya. Gunakan:

. $  (& Amp; Quot; # myform & amp; Quot;) record ({checkboxesAsBools: true}); 

Perilaku default tidak ada pilihan yang diberikan kepada (atau checkboxesAsBools didirikan palsu) adalah sama dengan metode standar script jQuery

 // tiga Moar, Moar 

Ekstensi htmlhelp unit testing menggunakan Response.Write di ASP.NET MVC

Unit ekstensi htmlhelp pengujian biasanya sangat sederhana. Namun, ketika menggunakan Response.Write memperluas teks output, bagaimana membuktikan bahwa itu adalah kurang jelas. Untungnya, solusinya sederhana.

Caranya adalah dengan membuat menyenangkan dari HttpResponse dan menangkap mengetik teks callback. Berikut adalah cara untuk melakukannya menggunakan MOQ, tetapi dapat dengan mudah dilakukan dengan kerangka simulasi yang kompeten lainnya:

 htmlhelp membantu swasta; responseText saluran pribadi; [Settings] Mengatur private void {var = new Mock ViewContext & amp; amp; lt; ViewContext & amp; amp; gt; (); Tanggapan var = Mock baru & amp; amp; lt; HttpResponseBase & amp; amp; gt; (); response.Setup (r = & amp; amp; gt; r.Write (It.IsAny & amp; amp; lt; String & amp; amp; gt; ())) .Callback ((String s) = & amp; amp; gt; responseText = S +); viewContext.Setup (v = & amp; amp; gt; v.HttpContext.Response) .Returns (response.Object); Asisten = htmlhelp baru (viewContext.Object sembilan Mock & amp; amp; lt; IViewDataContainer & amp; amp; gt; () objek.)} 

Kemudian Anda dapat dengan mudah memeriksa teks respon yang diterima. Di sini saya mencoba untuk memastikan bahwa kelanjutan dari nomor saya dicetak divs mengatakan

 [Test] kekosongan SomeTest swasta () {membantu. PrintSomeDivs (4); Assert.That (nama baru (& amp; amp; quot; & amp; amp; lt; div & amp; amp; gt; & amp; amp; Quot;.) Pertandingan (responseText) Count, Is.EqualTo (4)); }