In diesem Artikel werden meine jüngsten Implementierungsideen für ähnliche Kaskadenfunktionen in provinziellen und kommunalen Kaskaden eingeführt. Um Verantwortlichkeiten, Leistung und Verhalten so weit wie möglich zu trennen, wird diese Funktion in zwei Komponenten aufgeteilt und eine einzige verknüpfte Liste wird verwendet, um die Schlüsselkaskadenlogik zu implementieren. Der nächste Abschnitt hat einen Demonstrationseffekt. Obwohl dies eine sehr häufige Funktion ist, ist die Implementierungslogik dieses Artikels klar und der Code leicht zu verstehen. Es ist von der Semantik der Provinz- und Gemeindekaskaden getrennt und berücksichtigt die Trennung von Leistung und Verhalten. Ich hoffe, dass der Inhalt dieses Artikels einen gewissen Referenzwert auf Ihre Arbeit bringen kann. Willkommen zu lesen und zu korrigieren.
Kaskade -Kaskadenbetrieb
Cascadetyp. Persist Cascade Persistenz (Save) Operation
Cascadetyp. Merge Cascade Update (Mergy) Operation
Cascadetyp. Aktualisieren Sie den Kaskaden -Aktualisierungsbetrieb, fragen Sie nur ab und erhalten Sie Operationen
Cascadetyp. Entfernen Sie den Betrieb der Kaskade löschen
Cascadetyp. Alle Kaskaden alle Operationen oben
Unabhängig davon
Zugeordneter Verhältnispflege
Zugeordnetes = "ParentID" bedeutet, dass das ParentID -Attribut in der Kinderklasse verwendet wird, um die Beziehung aufrechtzuerhalten. Dieser Name muss genau mit dem ParentID -Attributnamen in der Kinderklasse übereinstimmen.
Es ist auch zu beachten
Demonstrationseffekt (Code-Download, Hinweis: Dieser Effekt erfordert, dass HTTP ausgeführt wird. Darüber hinaus sind die Daten im Effekt simulierte Daten und werden nicht vom Hintergrund zurückgegeben, sodass die Pulldown-Daten von Provinzen, Städten und Landkreisen, die Sie sehen, gleich sind):
Hinweis: In diesem Artikel wird die technische Implementierung der vorherigen zugehörigen Blogs verwendet. Wenn Sie es benötigen, können Sie auf den Link unten klicken, um darüber zu erfahren:
1) detaillierte Erläuterung der Erbschaftsimplementierung von JavaScript: Stellen Sie eine Klasse.js zur Definition der Erbschaftsbeziehung zwischen der JavaScript -Klasse und der Konstruktionsklasse;
2) JQuery-Fähigkeiten, um eine DOM-ähnliche Komponenten-Unterstützung zu erstellen, die DOM-ähnliche Ereignisverwaltung ermöglicht: Stellen Sie eine EventBase.js zur Verfügung, um eine Komponenteninstanz mit DOM-ähnlichen Veranstaltungsmanagementfunktionen zur Verfügung zu stellen;
3) Sekundäre Kapselung von JQuery's AJAX- und AJAX -Cache -Proxy -Komponenten: Ajaxcache: Bietet Ajax.js und Ajaxcache.js, vereinfacht Ajax -Anrufe von JQuery und Cache -Proxy für Client -Anfragen.
Erfahren wir zunächst mehr über die Anforderungen dieser Funktion.
1. Funktionsanalyse
Diese Funktion wird durch eine kaskadierende Komponente veranschaulicht, die drei Kaskadenelemente enthält:
1) Jedes Kaskadierungselement erfordert möglicherweise eine Option, die als Eingabeaufforderung verwendet werden kann:
In diesem Fall kann eine leere Option in der Datenliste jedes Kaskadierungselements ausgewählt werden (dh die von der Eingabe aufgeforderte):
Es ist möglicherweise auch nicht erforderlich, als Eingabeaufforderungen zu verwenden:
In diesem Fall kann in der Datenliste jedes Kaskadierungselements nur Datenoptionen ausgewählt werden, und es kann keine leere Option ausgewählt werden:
2) Wenn die aktuelle Seite aus der Datenbank abfragt und die Felder, die der Kaskadenkomponente entsprechen, Werte haben, wird der abfragte Wert in der Kaskadierungskomponente wiedergegeben:
Wenn das entsprechende Feld in der Abfrage keinen Wert hat, werden die beiden in den Anforderungen von Punkt 1 beschriebenen Situationen angezeigt.
3) Jedes Kaskadierungselement bildet eine einzelne verknüpfte Liste in der Datenstruktur. Die Datenliste des letzteren Kaskadierungselements bezieht sich auf die Daten, die vom vorherigen Kaskadierungselement ausgewählt wurden.
4) In Anbetracht der Leistungsprobleme wird die Datenliste jedes Kaskadierungselements von AJAX asynchron angezeigt.
5) Nach Abschluss der Initialisierung der Kaskadierungskomponente wird die Liste des ersten Kaskadierungselements automatisch geladen.
6) Wenn sich das aktuelle Kaskadierungselement ändert, löschen Sie die Datenliste aller Kaskadierungselemente, die direkt oder indirekt zugeordnet sind. Wenn der Wert nach dem vorherigen Kaskadierungselement nicht leer ist, wird die Datenliste des nächsten Kaskadierungselements, das direkt damit zugeordnet ist, automatisch geladen. Wenn Sie die Datenliste der Kaskadenelemente löschen, sollten Sie vorsichtig sein: Wenn die Kaskadierungselemente die Option Eingabeaufforderung anzeigen müssen, muss die Option beim Löschen beibehalten werden.
7) Wir müssen die Leistungsprobleme vollständig berücksichtigen und doppelte Belastungen vermeiden.
8) In Anbetracht des Problems der Formulare -Einreichung muss der von der Kaskadenkomponente ausgewählte Wert der Kaskadenkomponente in einem versteckten Textfeld reflektiert werden, um die Einreichung des Werts der Kaskadenkomponente über das Textfeld zum Hintergrund des Hintergrunds zu erleichtern.
Die Funktion ist ungefähr wie oben.
2. Implementierungsideen
1) Datenstruktur
Was sich von anderen Komponenten unterscheidet, ist, dass es einige Abhängigkeiten von den Daten im Hintergrund hat. Die Datenstruktur, die ich betrachte, ist besser implementiert:
{"id": 1, "text": "peking", "code": 110000, "parentId": 0}, {"id": 2, "text": "hebei provinz", "code": 220000, "parentId": 0}, {"id": 3, "text": "henan province", "codes": 330000 ",": ":": ":" codes "," codes ": 330000"ID ist die eindeutige Datenkennung, und die Assoziationsbeziehung zwischen Daten wird durch ParentID konstruiert. Text und Code sind alle gewöhnlichen Geschäftsfelder. Wenn wir dieser Datenstruktur folgen, ist es sehr einfach, die Schnittstelle der Kaskadierungsdatenliste abzufragen:
// Überprüfen Sie die Liste des ersten Kaskadenelements/API/Cascade? PANTID = 0 // Überprüfen Sie die Liste des zweiten Kaskadenelements basierend auf dem Wert, der durch das erste Kaskadenelement/API/Cascade ausgewählt wurde? PARTIDID = 1 // Die Liste des dritten Kaskadenelements basierend auf dem Wert des zweiten Kaskadenelements/API/CASCADE?
Diese Struktur ist auch für den Hintergrund leicht zu handhaben. Obwohl sie strukturell eine baumförmige Tischstruktur sind, sind die Abfragen alle einschichtige, sodass sie einfach zu implementieren sind.
Aus der vorherigen Abfrage zeigt auch, dass diese Struktur uns helfen kann, die Schnittstelle und die Parameter der Datenabfrage in eine zu vereinen, was für die Komponentenentwicklung sehr bequem ist. Nachdem wir diese Datenstruktur aus dem Hintergrund erhalten haben, analysieren wir jede Daten in eine Option, z. Dies kann nicht nur die Dropdown-Anzeige der Datenliste vervollständigen, sondern auch den ausgewählten Wert des aktuellen Kaskadenelements über die Funktion des Auswahlformularelements erfassen. Wenn sich das Kaskadenartikel ändert, können wir schließlich auch die ausgewählte Option erhalten und den Wert des darauf gespeicherten Daten-Param-Werts als Parameter ParentID verwenden, um die Liste des nächsten Kaskadenelements zu laden. Dies ist auch die Idee, Datenabfragen und Parsen von Komponenten zu kaskadieren.
Was hier jedoch berücksichtigt werden muss, ist das Problem der Flexibilität. In den tatsächlichen Projekten können die Datenstrukturen von Kaskadenkomponenten nach einer ähnlichen Assoziationsbeziehung wie ID -ParentID definiert werden, ihre Felder werden jedoch nicht unbedingt als ID -Parentid -Textcode bezeichnet und sind wahrscheinlich andere Felder. Mit anderen Worten: Wenn die Daten in eine Option analysiert werden, ist das für den Optionstext und -wert verwendete Feld und der Wert des für das Daten-Param-Wert-Attribut verwendeten Felds ungewiss; Der Parametername ParentID, der beim Abfragen von Daten verwendet wird, kann nicht tot sein. Manchmal, wenn das Backend -Mitarbeiter die Abfrageschnittstelle zuerst schreibt und einen anderen Namen verwendet, können Sie jemanden nicht bitten, seinen Parameternamen zu ändern, da er kompiliert und bereitgestellt werden muss, was problematischer als das Front -End ist. Der Wert von parentID = 0 kann nicht festgelegt werden, da die Parentid der ersten Datenschicht im tatsächlichen Projekt leer oder -1 sein kann. Diese Dinge müssen als Optionen konzipiert werden. Einerseits wird der Standardwert bereitgestellt, und die externe Einstellung ist auch gemäß der tatsächlichen Situation reserviert. In der endgültigen Implementierung dieses Artikels wird diese Option beispielsweise so definiert:
TextField: 'Text', // Der Feldname in den zurückgegebenen Daten, die im Element <OPTION> angezeigt werden sollen
ValueField: 'Text', // Der Feldname in den zurückgegebenen Daten, die auf den Wert des <option> -Elements festgelegt werden sollen
Paramfield: 'ID', // beim Aufrufen der Datenabfrageschnittstelle entspricht der Feldname den Daten, die an den Hintergrund übergeben werden sollen
ParamName: 'PARTID', // Beim Aufrufen der Datenabfrageschnittstelle wird der Parametername der Daten nach der URL übergeben
DefaultParam: '', // Bei der Abfrage des ersten Kaskadenelements ist der an den Hintergrund übergebene Wert im Allgemeinen 0, '' oder -1 usw., was angibt
2) HTML -Struktur
Gemäß Artikel 1 der vorherigen Funktionsanalyse gibt es zwei Arten von anfänglichen HTML -Strukturen von Kaskadenkomponenten:
<ul id="licenseLocation-view"><li><select><option value="">Please select a province</option></select></li><li><select><option value="">Please select a city</option></select></li><li><select><option value="">Please select a district and county</option></select></li></ul>
oder
<ul id = "companyLocation-view"> <li> <select> </select> </li> <li> </select> </li> <li> <li> </select> </li> </ul>
Der einzige Unterschied zwischen diesen beiden Strukturen besteht darin, ob die als Eingabeaufforderungen verwendete Option konfiguriert ist. Es sollte auch beachtet werden, dass das Wert -Attribut auf leer festgelegt werden muss, wenn diese leere Option benötigt wird, da diese leere Option beim Senden des Formulars die Option Eingabeaufforderung an den Hintergrund übermittelt.
Das Wichtigste an diesen beiden Strukturen ist das ausgewählte Element, das nichts mit UL und Li zu tun hat. Ul und li werden für die UI verwendet; Das ausgewählte Element hat keine Semantik, und es besteht keine Notwendigkeit, zu ermitteln, welche Provinz eine Stadt ist und welcher Bezirk oder Landkreis. Funktionell gesehen repräsentiert eine Auswahl ein Kaskadenelement. Es spielt keine Rolle, wo diese Auswahl definiert sind. Wir müssen nur die Kaskadierungskomponente mitteilen, aus der Elemente ausgewählt werden, aus denen die Kaskadenelemente bestehen. Das einzige, was der Komponente mitgeteilt werden muss, ist die Abfolge dieser ausgewählten Elemente. Dies wird jedoch normalerweise durch die Standardreihenfolge der Elemente in der HTML gesteuert. Diese Struktur kann uns helfen, die Funktionen von Komponenten so weit wie möglich vom Verhalten zu trennen.
3) Trennung der Verantwortlichkeiten und die Verwendung von einzelnen verknüpften Listen
Aus dem vorherigen Teil ist hervorzubringen, dass eine Kaskadenkomponente nach Aufgaben in zwei Kernkomponenten unterteilt werden kann, eine für die Verwaltung der Gesamtfunktionen und Internet -Kaskaden -Elemente (Cascadeview) verantwortlich ist, und der andere ist für die funktionale Implementierung der Kaskade -Elemente (Cascadeitem) verantwortlich. Um die Kaskadierungslogik bequemer zu implementieren, müssen wir nur alle Kaskadenelemente über eine verknüpfte Liste verbinden. Im Rahmen des Veröffentlichungs-Subscribe-Modus zeichnet sich der letztere Kaskadierungselement der Nachricht ab, dass sich das vorherige Kaskadenelement geändert hat. Wenn sich das aktuelle Kaskadierungselement ändert, wird eine Nachricht veröffentlicht, um das nachfolgende Kaskadierungselement zur Verarbeitung der entsprechenden Logik zu informieren. Durch die Rolle der verknüpften Liste kann diese Nachricht bis zum letzten Kaskadierungselement übergeben werden. Wenn Sie es in einem Bild beschreiben, wird es ungefähr so sein:
Alles, was wir tun müssen, ist, die Veröffentlichung und Bereitstellung guter Nachrichten zu kontrollieren.
4) Einreichung von Formular
Um den Wert der Kaskadenkomponente bequem auf den Hintergrund zu übermitteln, kann die gesamte Kaskadenkomponente als Ganzes behandelt werden, und ein Onchanged -Ereignis wird außen vorgelegt, durch das das externe Ereignis die Werte aller Kaskadierungsgegenstände erhalten kann. Da es mehrere Kaskaden gibt, kann dieses Ereignis beim Veröffentlichen des Onchanged -Ereignisses nur dann ausgelöst werden, wenn sich eine Kaskade ändert.
5) Ajax -Cache
In dieser Komponente müssen wir zwei Ebenen von Ajax -Cache berücksichtigen. Der erste befindet sich auf Komponentenebene. Zum Beispiel habe ich das erste Kaskadenartikel auf Peking umgestellt. Zu diesem Zeitpunkt lud das zweite Kaskadenelement die Daten von Peking. Dann wechselte ich das erste Kaskadenartikel von Peking nach Hebei und dann nach Peking. Zu diesem Zeitpunkt zeigt das zweite Kaskadenelement weiterhin die zugehörige Datenliste von Peking an. Wenn wir ihre Daten, als die Liste zum ersten Mal geladen wurde, zwischengespeichert wurden, müssen wir diesmal keine AJAX -Anfrage initiieren. Der zweite ist eine Ajax -Anfrage. Wenn auf der Seite mehrere Kaskadenkomponenten vorhanden sind, wechsle ich zunächst das erste Kaskadierungselement der ersten Kaskadierungskomponente in Peking, und der Browser initiiert eine AJAX -Anfrage zum Laden von Daten. Wenn ich das erste Kaskadierungselement der zweiten Kaskadenkomponente in Peking umschaltet, sendet der Browser eine weitere Anfrage zum Laden von Daten. Wenn ich die von der ersten AJAX -Anforderung der ersten Komponente zurückgegebenen Daten zuerst zwischendurchschnittlich ausspeichere, verwendet die zweite Komponente dieselben Parameter, um dieselbe Schnittstelle zu fordern, direkt den vorherigen Cache, um das Ergebnis zurückzugeben, wodurch auch die AJAX -Anforderung reduziert werden kann. Die zweite Ebene des Ajax -Cache hängt von der obigen "sekundären Kapselung von JQuery Ajax und Ajax Cache Proxy -Komponente: Ajaxcache" ab. Für die Komponente implementiert es nur die erste Ebene des Cache intern, muss jedoch nicht die zweite Cache -Ebene berücksichtigen, da die Cache -Implementierung der zweiten Ebene transparent ist und nicht weiß, dass die von ihnen verwendete AJAX -Komponente die Funktion des Cache hat.
3.. Implementierungsdetails
Die endgültige Implementierung umfasst drei Komponenten, Cascadeview, Cascadeitem und CascadepublicDefaults. Die ersten beiden sind der Kern der Komponente, und das letzte wird nur verwendet, um einige Optionen zu definieren. Seine Funktion wird in den Kommentaren von Cascadeitem ausführlich beschrieben. Darüber hinaus gibt es im folgenden Code sehr detaillierte Kommentare, die die Rolle einiger Schlüsselcodes erklären. Wenn Sie den Code basierend auf den vorherigen Anforderungen betrachten, sollte er relativ leicht zu verstehen sein. Früher habe ich Text verwendet, um einige Implementierungsdetails zu erklären, aber später war ich allmählich das Gefühl, dass diese Methode etwas undankbar war. Erstens war die Sprache auf der Detail -Ebene nicht einfach zu organisieren. Manchmal habe ich meine Bedeutung nicht ausdrückt. Ich wollte offensichtlich etwas klar erklären, aber es stellte sich heraus, dass es noch verwirrter war. Zumindest würde ich mich so fühlen, wenn ich las, was ich geschrieben habe. Zweitens können Entwickler selbst Quellcode lesen, und die meisten aktiven Entwickler sind bereit, Implementierungsideen zu verstehen, indem sie über den Code anderer Menschen nachdenken. Also habe ich stattdessen Annotation zum Erklären von Implementierungsdetails verwendet :)
CascadepublicDefaults:
Define (function () {return {url: '', // Data Query Interface TextField: 'Text', // Daten im Feldname ValueField: 'Text', // Daten zurück im Feldnamen zurückgeben, der im <option> Element> Element, Paramfield: 'Text', // Daten zurückgeben, die Daten im Feld nennen, die auf dem Wert des Wertes des Wertes, der von der Option> "Element", "Element". Von den Daten, die an den Hintergrund übergeben werden sollen, ist Paramname: 'PARTID', // Beim Aufrufen der Datenabfrageschnittstelle ist der Parametername der Daten, die nach der URL bestehen, defaultParam: '', // beim Abfragen des ersten Kaskadenelements, der an den Hintergrund übergeben wird. Eingabeaufforderung wie: Bitte wählen Sie eine Provinz). Wenn wahr, wird der Standard -erste OptionsoptionResolveajax nicht gelöscht, wenn das Cascade -Element neu geladen wird: Funktion (res) {return res;} //, da das Kaskadenelement eine asynchronische Anfrage sendet, wenn die Anforderung geladen wird.Cascadeview:
Define (Funktion (Anforderung, Exportieren, Modul) {var $ = require ('jQuery'); var class = require ('mod/class'); var eventBase = require ('mod/eventBase'); var publicDefaults = require ('mod/cascadepublicDefaults'); Die Cascadeitem -Komponente*/var defaults = $ .extend ({}, publicDefaults, {$ Elements: undefined, // Array des kaskadierten Elements JQ -Objekte, die Reihenfolge der Elemente in den Daten repräsentiert die Reihenfolge von kaskadierten Wertenspuren: ',', //. Stadt, Distrikt, Chaoyang -Distriktwerte: '', // Die durch ValuationSeparator getrennte Zeichenfolge repräsentiert den Wert jeder Auswahl zu Beginn eingeschaltet: $ .noop // Dieses Ereignis wird ausgelöst, wenn der Wert eines kaskadierten Elements ändert}); this.base (); $elements.each(function (i) {var $el = $(this);//Instantiate the CascadeItem component and point the prevItem property of each instance to the previous instance//Set the first prevItem property to undefinedvar cascadeItem = new CascadeItem($el, $.extend(that.getItemOptions(), {prevItem: i == 0 ? undefined : items[i - 1], Wert: $ .trim (Werte [i])}); items.push (CascadEItem); // Jede Änderungen der Cascade -Instanz lösen das Änderungsereignis der Cascadeview -Komponente aus // Außenseiten können in diesem Rückruf die Werte der Werte aller Kaszaden -Elemente einstellen. {that.trigger ('geändert. () {return defaults;}, getItemOptions: function () {var opts = {}, _options = this.options; für (var i in publicDefaults) {if (publicDefaults.hasownProperty (i) && i in _options) {opts; Kaskadierelemente, bei denen es sich um eine Zeichenfolge handelt, die durch ValuvicalSeParator getrennt ist // Der Wert eines leeren Kaskadenelements gibt GetValue nicht zurück: function () {var value = []; value.join (this.options.ValueSeParator);}}, erweitern: eventBase}); return CascadeView;});Cascadeitem:
Define (Funktion (Anforderung, Exportieren, Modul) {var $ = require ('jQuery'); var class = require ('mod/class'); var eventBase = Request ('mod/eventBase'); var publicDefaults = require ('mod/cascadepublicDefaults'; = neuer Ajaxcache ();/*** Es gibt einen Teil der in öffentlichen Defaults definierten Option, da die Cascadeitem -Komponente nicht direkt von externen Kascadeview -Komponenten verwendet wird. Die Option in publicDefaults wird an Cascadeiitem*/var defaults = $ .extend ({}, publicDefaults, {previtem: undenfiniert, // auf den vorherigen Kascade -Elementwert verweisen: '' // Wert, der am Anfang angezeigt wird}); durch diese. Funktion () des Auswahlelements {that.trigger ('geändert.cascadeitem');}); // Wenn der Wert eines Kaskadenelements ändert, ist die Verarbeitung, die Daten nach Bedarf zu löschen und neu zu laden. that.hascontent && that.clear (); // Wenn es sich nicht um das erste Kaskadenelement handelt und das vorherige Kaskadenelement keine gültige Option auswählt, wird es nicht verarbeitet, wenn (that.Previtem && $ .trim (this.previtem.getValue () == ') return; '' && this.one ('render.cascadeiitem', function () {// Setzen Sie den Anfangswert, den. this.getDefaults (), Optionen);}, getDefaults: function () {return defaults;}, clear: function () {var $ el = this. $ el.html ('');} // die nachfolgenden Kaskadenelemente zur Löschung und Neulade der Daten this.trigger ('geändert.CascadEItem'); Die Daten des ersten Kaskadierungselements sind die Daten der obersten Ebene, ein fester und eindeutiger Schlüssel wird verwendet, wenn zwischengespeichert wird: Root // Der Schlüsselname, der von anderen Kaskadenelementen zwischengespeichert wird, hängt mit der Option in Bezug auf die vorherige Auswahl aus (! this.Previtem) {paramvalue = opts.defaultParam; this.previtem.getParamValue (); datakey = paramvalue;} // Überprüfen Sie zunächst, ob im Datencache geladene Daten enthalten sind. Wenn es direkt angezeigt wird, wird es direkt angezeigt, um ajaxif (datakey in dieser paramvalue; ajax.get (opts.Url, params) .done (function (res) {// Resolveajax Dieser Rückruf wird verwendet, um die von Ajax extern zurückgegebenen Daten zu analysieren. Daten; that.render (data);}});}}, Reender: Funktion (Daten) {var html = [], opts = this.options; data.foreach (Funktion (Element) {html.push (['<' <'option value = "', item [opts.valuefield]," Data-Param-Param-Param-Param-Param-Param-Param-Wert der Paramfield. Data-Param-Wert-Eigenschaft des Optionselements [opts.paramfield], '">', item [opts.Textfield], '</option>']. Join ('');}); // Dynamisch hinzufügen, um die erste Option zu beeinflussen, um die erste Option zu beeinflussen // am Ende, um diesen Wert zu leeren. = true; // bedeutet, dass es inhaltlich ist Cascadeitem;});4. Demo -Anweisungen
Demonstrieren Sie die Struktur des Codes:
Was gerahmt ist, ist der relevante Teil der Demonstration. HTML/Regist.html ist die Seite, die den Effekt demonstriert, und JS/App/Regist.js ist der Eintrag zum Demonstrationseffekt JS:
define(function (require, exports, module) { var $ = require('jquery'); var CascadeView = require('mod/cascadeView'); function publicSetCascadeView(fieldName, opts) { this.cascadeView = new CascadeView({ $elements: $('#' + fieldName + '-view').find('select'), url: '../api/cascade.json', onChanged: this.onchanged, Werte: opts.values, keepFirstoption: this.keepFirstoption, Resolveajax: res) {if (Res.Code == 200) {return res.data; $ ('input [name = "licenselocation"]'), keepFirstoption: true, setCascadeview: publicsetcaDeView, onCanged: function (e, value) {location_views.licenSeLocation. $ input.val (value); setCascadeview: publicetcascadeview, onChanged: function (e, value) {location_views.companylocation. $ input.val (Wert); Location_views.companylocation.setCascadeView ('CompanyLocation', {values: location_views.companylocation. $ Input.val ()});});Achten Sie auf die Funktion der Variablen location_views im obigen Code, da auf der Seite mehrere Kaskadierungskomponenten vorhanden sind. Diese Variable wird tatsächlich auf ähnliche Weise durch das Richtlinienmodell verwaltet. Wenn Sie dies nicht tun, ist es einfach, einen doppelten Code zu generieren. Dieses Formular ist auch für die Trennung und Einkapselung einer Geschäftslogik in der Eintragsdatei förderlicher, z. B. der Ort, an dem die Geschäftslogik verarbeitet wird.
5. Andere
Dies ist wahrscheinlich der letzte Blog, den das Unternehmen jetzt geschrieben hat. In zwei Tagen müssen Sie in einer neuen Einheit arbeiten. Ich bin mir nicht sicher, ob Sie so viel Zeit haben, um Ihre üblichen Arbeitsideen aufzuzeichnen, aber zumindest haben Sie die Gewohnheit entwickelt, Blogs zu schreiben, und Sie werden Zeit ausdrücken, wenn Sie in Zukunft keine Zeit haben. Das Ziel in diesem Jahr ist es hauptsächlich, das Wissen zu erweitern und die Qualität des Codes zu verbessern. Die nachfolgenden Blogs werden mehr in der Kategorie der Komponentenentwicklung enthalten. Ich hoffe, dass Sie in Zukunft weiterhin auf die Wulin.com -Website achten können!