Mehr

Attributfelder mit ArcPy-Cursoren und bedingten Anweisungen automatisch inkrementieren?

Attributfelder mit ArcPy-Cursoren und bedingten Anweisungen automatisch inkrementieren?


Ich versuche, eindeutige IDs für ein Attribut namens "FACILITYID" (str) zu erstellen und habe eine Menge Hilfe von verwandten Beiträgen und Online-Python-Tutorials. Ich habe die Zeilen ausgewählt, für die ich eindeutige IDs erstellen wollte, und diese autoIncrement()-Funktion im Feldrechner verwendet, die gut funktioniert.

def autoIncrement(pStart=1,pInterval=1): global rec if (rec == 0): rec = pStart return rec else: rec = rec + pInterval return rec

Ich möchte jedoch die Variable im Auge behalten rec damit ich später neue eindeutige IDs erstellen kann. Nachdem ich zu dem Schluss gekommen bin, dass ich den Feldrechner verlassen muss, habe ich versucht, stattdessen Cursor zu verwenden.

Um den maximalen ID-Wert zu aktualisieren, habe ich in der Umgebung eine Datentabelle mit einem einzelnen Attribut "FACILITYID" erstellt, das aktualisiert werden kann, wenn der Code ausgeführt wird. Ich hatte damit Erfolg, bis auf ein kleines Detail: Ich möchte nur Zeilen aktualisieren, die noch keine FacilityID haben. Insbesondere möchte ich, dass der Code nur für Zeilen funktioniert, in denen die FACILITYID einem Leerzeichen entspricht.

FACILITYID =="

Ich habe unzählige if-Anweisungen, while-Schleifen, die Funktion getValue() und mehr ausprobiert, aber es scheint nicht richtig zu sein. Kann mir jemand helfen, diesen Code für meine Zielattributfelder zu verwenden?

#import module import os, sys import arcpy #Set variables rec = 0 workspace = "Database ConnectionsFE.sde" arcpy.env.workspace = workspace feature_name = "FE.SManhole" #change Feature Class falls erforderlich field = "FACILITYID" table_name = "FE.SWR_FacilityID" tRows = arcpy.SearchCursor(table_name) tRow = tRows.next() #Ziehen den aktuell höchsten Wert aus der Facility_ID-Tabelle maxID = int(tRow.getValue(field)) # Definiere automatische Inkrementfunktion def autoIncrement (pStart=maxID,pInterval=1): global rec if (rec == 0): rec = pStart return rec else: rec = rec + pInterval return rec #Schleife durch die Tabelle, um FacilityID zu aktualisieren, falls nötig. Cursor = arcpy.UpdateCursor(feature_name) #Hier gibt es keine Garantie für die Reihenfolge der Zeilen im Cursor: #####Ort, an dem ich if-Anweisungen ausprobiert habe.#### row.setValue(field, str(autoIncrement() )) cursor.updateRow(row) #save new rec value to FE.SWR_FacilityID table maxID = rec tRows = arcpy.UpdateCursor(table_name) tRow = tRows.next() tRow.setValue(field, str(maxID)) tRows.updateRow (tRow) del tRows, tRow, Cursor, Zeile print 'Höchster "FACILITYID" Wert: ' + str(maxID)

Ich bin sehr neu in Python und habe einen Großteil dieses Codes aus früheren Beiträgen erhalten, einschließlich Auto-Inkrementierung in Python-Skript mit ArcPy-Cursor?


Die Funktion, die Sie zum automatischen Inkrementieren von IDs verwenden, ist für die Verwendung im Feldrechner gedacht; im Feldrechner müssen Sie die globale Variable definieren, die von anderen Zeilen in der Tabelle verwendet werden soll, sonst wären alle Ihre Werte 1. Für Ihre Zwecke müssen Sie rec unbedingt als globale Variable definieren, und Sie brauchen nicht um eine Funktion zu erstellen, um 1 hinzuzufügen (einfach verwendenrec+=1).

Problem: Sie haben eine Einrichtungstabelle, einige Einrichtungen haben bereits IDs und andere nicht. Die ID ist ein numerischer Wert, der in einem Textfeld gespeichert wird. Sie müssen also die größte bereits zugewiesene ID-Nummer finden und die größte ID verfolgen, die Ihr Skript zugewiesen hat. Ich gehe davon aus, dass Sie keine ID automatisch zuweisen möchten, die bereits einer anderen Zeile zugewiesen ist (wodurch Ihr Feld zu einem Primärschlüssel wird).

Mit einem arcpy.da-Cursor können Sie eine Abfrage (where-Klausel) in den Cursor integrieren, sodass Sie nur durch Zeilen iterieren, die die Bedingungen der Abfrage erfüllen (http://desktop.arcgis.com/en/arcmap /10.3/analyze/arcpy-data-access/updatecursor-class.htm) . Versuche dies:

import os, sys import arcpy #Variablen setzen rec = 0 workspace = "DatenbankverbindungenFE.sde" arcpy.env.workspace = workspace feature_name = "FE.SManhole" #Feature-Class ändern, falls erforderlich field = ["FACILITYID"] table_name = "FE.SWR_FacilityID" ### Erstellen Sie eine Liste aller bereits ausgefüllten Einrichtungs-IDs ### Konvertieren Sie jedes Element in eine ganze Zahl, wenn das Element nicht "oder" oder Keine ist ###### Ich gehe davon aus, dass Ihre ids sind ganze Zahlen, aber möglicherweise müssen Sie all_faciility_ids = [int(x[0]) für x in arcpy.da.SearchCursor(feature_name, field) ändern, wenn x[0] nicht in [",", None]] # ## Sortieren Sie die Liste der IDs (vom kleinsten zum größten) und geben Sie das letzte Element zurück max_id = sorted(all_facility_ids)[-1] #Daten mit arcpy.da.UpdateCursor durchlaufen (viel schneller) # arcpy.da Cursors haben die Möglichkeit, Verwenden Sie eine Abfrage, also tun wir das query = "FACILITYID not in (",", NULL)" mit arcpy.da.UpdateCursor(feature_name, field, query) als Cursor: für Zeile im Cursor: while True: ## Dieser Teil wird weiterhin zu rec hinzugefügt, wenn die Nummer bereits in diesem enthalten ist Die Liste der Einrichtungs-IDs, wenn rec in all_facility_ids: rec +=1 else: rec +=1 break row[0] = str(rec) cursor.updateRow(row) del cursor

Hier ist eine weitere Option, wenn Sie eine if-Anweisung verwenden möchten, um alle Zeilen zu durchlaufen:

with arcpy.da.UpdateCursor(feature_name, field) als Cursor: für Zeile im Cursor: if row[0] not in (",", None): while True: ## Dieser Teil wird weiter zu rec hinzugefügt, wenn die Zahl . ist bereits in der Liste der Facility-IDs if rec in all_facility_ids: rec +=1 else: rec +=1 break row[0] = str(rec) cursor.updateRow(row) else: continue del cursor

Die bedingte MLE für ein autoregressives Modell kann mit der Standardtheorie der linearen Regression gelöst werden. Es ist einfach, dies in Matrixform zu tun und die Standardformel für den Koeffizientenschätzer in dieser Form zu verwenden. Trotzdem ist es möglich, das Maximierungsproblem in skalarer Form zu lösen, und ich zeige Ihnen, wie das geht.

Ihre Summe in dieser bedingten Wahrscheinlichkeit ist falsch geschrieben. Ich gehe davon aus, dass Sie Zeitwerte $t = 1, 2, . T$, in diesem Fall konditionieren Sie auf die Werte $t = 1, 2$ und die Summation geht von $t = 3, . T$. Es ist auch einfacher, wenn Sie Ihre Gleichungen in Bezug auf den Genauigkeitsparameter $lambda equiv sigma^<-2>$ schreiben. Mit diesen Änderungen und einer weiteren Vereinfachung durch das Entfernen additiver Konstanten kann die Conditional-Log-Likelihood-Funktion wie folgt geschrieben werden:

$ell(phi_1, phi_2, lambda) = frac <2>cdot ln (lambda) - frac <2>sum_^T (x_t - phi_1 x_ - phi_2 x_)^2.$

Um unsere Analyse zu erleichtern, definieren wir die Probenmengen $s_ äquivalent sum_^T x_ x_$ für $i,j = 0, 1, 2$. Unter Verwendung dieser Notation sind die Partiturfunktionen:

Autoregressionskoeffizienten: Die bedingten MLEs für die autoregressiven Koeffizienten lösen die simultanen Gleichungen:

Das Lösen dieser Gleichungen ergibt:

Varianz-/Präzisionsparameter: Der bedingte MLE für die Varianz/Präzision wird erhalten, indem die erste der Bewertungsgleichungen auf Null gesetzt wird und die Schätzer für die autoregressiven Koeffizienten eingesetzt werden. Es wird gegeben von:

Dies ist ein verzerrter Schätzer, und die Bessel-Korrektur wird normalerweise angewendet, um dies zu korrigieren, indem $T-3$ im Nenner anstelle von $T-2$ eingesetzt wird.


Wie kann ich erforderliche Felder mit einer dynamischen Komponente dynamisch rendern?

Ich habe eine Visualforce-Seite, auf der ich viele Felder mit einer dynamischen Komponente rendere (das ist ein Ausgabebereich, der alle Felder enthält). Die Felder werden basierend auf einer Auswahl von Optionen in einer Mehrfachauswahlliste hinzugefügt, und jedes Mal, wenn eine Auswahl in der Mehrfachauswahlliste getroffen wird, wird die Seite von der Serverseite neu gerendert, um die neue Auswahl an Feldern anzuzeigen. Einige dieser Felder müssen ausgefüllt werden.

Immer wenn ein Feld auf der Seite erforderlich ist und die Auswahl in der Mehrfachauswahlliste geändert wird, die steuert, welche Felder gerendert werden, gibt Visualforce einen Fehler aus, dass das Feld nicht ausgefüllt wurde, selbst wenn es basierend auf der Auswahl entfernt werden soll. Dadurch wird verhindert, dass das Feld entfernt wird und die Felder auf der Seite aufgrund dieses Visualforce-Fehlers nicht aktualisiert werden.

Also hatte ich die Idee, meine eigene erforderliche Funktionalität mit jQuery und JavaScript zu erstellen, um auf der Clientseite mit einer Validierungsmethode in Apex auf der Serverseite zu validieren.

Gibt es einen besseren Weg, dies zu tun? Wenn nicht, wie kann ich die "erforderlichen" Funktionen von Visualforce duplizieren (mit einem roten Balken neben jedem der erforderlichen Felder).

Als Referenz

Hier ist ein Teil meiner aktuellen Visualforce-Seite. Produkte ist eine Mehrfachauswahlliste, wenn auf die Befehlsschaltfläche geklickt wird, die Felder werden neu gerendert.

Die SelectProduct-Methode ist extrem einfach. Es ist nur eine Methode, die nichts tut und nichts zurückgibt. Hauptsächlich wird es verwendet, um nur einen Roundtrip zum Server durchzuführen, um die SectionsAndFields-Eigenschaft neu zu rendern. Ein Codebeispiel der SectionsAndFields-Eigenschaft finden Sie in dieser Antwort aus einer anderen Frage.


Fügen Sie dem apex:inputField (Field1) ein onchange-Attribut hinzu, das eine JavaScript-Funktion aufruft, wenn Field1 geändert wird, um den gewünschten Wert für Field2 auszuwerten, z. B.:

Seien Sie beim Zugriff auf VF-Elemente aus JavaScript vorsichtig, da dies je nach der HTML-Generierung von Visualforce etwas frustrierend sein kann - Sie können entweder $Component oder die generierte Elementbaumsyntax verwenden.

Erstellen Sie ein Zahlenfeld (Feld 1) und erstellen Sie dann ein Formelfeld (Typ: Zahl). Geben Sie die Formel als Test_Number__c + 30 ein, wobei Test_Number__c das erste Zahlenfeld ist. Dies sollte Ihren Bedarf wie angegeben ausreichen. Bitte beachten Sie, dass das Formelfeld nicht auf der Bearbeitungsseite angezeigt wird, der Wert jedoch auf der Detailseite angezeigt wird, nachdem Sie den Opportunity-Datensatz gespeichert haben.


Können bedingte Pflichtfelder in SharePoint-Formularen erstellt werden?

Ich habe eine SharePoint-Liste mit ein paar Feldern, die verwendet werden, um ein Druckerverzeichnis zu erstellen.

Im Moment habe ich das Ja/Nein-Feld "Netzwerkdrucker", um zu bestimmen, ob ich zusätzliche Daten wie IP-Adresse und Subnetz sammeln muss. Bisher habe ich dieses Feld nur als nicht obligatorisch markiert und das Eingabeformular in InfoPath so geändert, dass es ausgeblendet wird, sobald jemand in der Netzwerkdruckerauswahl "Nein" wählt, damit der Endbenutzer weiß, dass er diese Informationen nicht ausfüllen muss im.

Ich möchte, dass der Benutzer, wenn er "Ja" wählt, den Artikel nicht zur Liste hinzufügen kann, bis diese technisch obligatorischen Felder ausgefüllt sind.


2 Antworten 2

Ich mache eine ähnliche Sache basierend auf der Eingabe in einem Dropdown-Menü. Sie können dies für Ihre Zwecke umgestalten.

Das Obige gibt true zurück, wenn die Bedingung erfüllt ist, und false, wenn nicht. Das Ergebnis ist ein bedingtes Pflichtfeld.

Wenn Sie also beispielsweise sicherstellen möchten, dass ein Feld nicht leer ist, können Sie Folgendes tun:

Dies gibt erforderlich true zurück, wenn das Feld keinen Text enthält.

Sie können dieses Zeug auch auf verschiedenen Stileigenschaften aufbauen. Hier ist ein Beispiel für die Überprüfung, ob das Feld einen roten Rahmen hat:


Sonntag, 24. Juli 2016

GIS5103 - Modul 10 - Erstellen von benutzerdefinierten Werkzeugen

In diesem Modul wurden wir beauftragt, ein benutzerdefiniertes Clipping-Tool zu erstellen. Die Umwandlung Ihres Python-Skripts in ein Tool ist eine einfache Möglichkeit, die Funktionalität Ihres Skripts mit anderen zu teilen.

Der erste Schritt bestand darin, ein Python-Skript zu erstellen. Uns wurde ein Vorlagenskript zum Ändern bereitgestellt. Zweitens musste eine neue Toolbox erstellt werden. Nachdem wir der Toolbox ein Skriptwerkzeug hinzugefügt haben, richten wir die Werkzeugeigenschaften ein. Das unser modifiziertes Python-Skript war die Skriptdatei und vier Parameter wurden erstellt: Eingabedateiposition, Clipbegrenzungsfeature, Eingabefeatures und Ausgabedateiposition. Das Einrichten des Datentyps und der Werte war ein wichtiger Schritt. Vollständige Dateipfade sind erforderlich, Anführungszeichen sind jedoch nicht erforderlich.

Modul 10 MultiClip Tool Dialogfeld dialog

Nachdem die Werkzeugeigenschaften festgelegt waren, mussten wir unser Python-Skript bearbeiten, damit Benutzer die Parameter eingeben können. Die Verwendung der Funktionen GetParameter() und GetParameterAsText() hat mir einige Schwierigkeiten bereitet. Ich musste verstehen, ob das zurückgegebene Objekt ein String war oder nicht. Unser Eingabe-Features-Parameter war ein Mehrfachwert, was bedeutet, dass mehr als ein Wert oder eine Liste bereitgestellt werden konnte. Das Python-Skript verwendet eine "for"-Schleife, um jedes Eingabemerkmal in der Liste zu durchlaufen. Wir mussten auch die ursprünglichen "print"-Anweisungen des Python-Skripts durch die AddMessage-Funktion ersetzen. Durch die Verwendung von AddMessage-Anweisungen konnten Meldungen im Dialogfeld "Fortschritt" und im Ergebnisfenster des Tools angezeigt werden.

Modul 10 Ergebnisse des MultiClip-Tools
Für jedes Eingabe-Feature wird der Name des Features gedruckt. Nachdem die Clip-Analyse durchgeführt wurde, wird der Name des neu erstellten Clipping-Features gedruckt.

Ich habe mich entschieden, zu überprüfen, ob das Werkzeug auch mit einem anderen Grenzmerkmal funktioniert. Ich habe eine Karte erstellt, die sowohl die ausgeschnittenen Durango-Features als auch die ausgeschnittenen NuevoLeon-Features anzeigt.

Modul 10 Endgültige Karte -
mex_rivers-, mex_roads-, mex_rails- und mex_urban-Eingabefunktionen, die sowohl auf die Durango- als auch auf die NuevoLeon-Funktionen zugeschnitten sind.
Schließlich habe ich ein Flussdiagramm des im Tool verwendeten Skripts erstellt.

Modul 10 MultiClip-Skript-Flussdiagramm
Für diese Aufgabe musste ich ArcGIS-Hilferessourcen verwenden, um die Funktionen im Skript und ihre jeweiligen Argumente besser zu verstehen. Codebeispiele zu sehen war hilfreich. Mir ist auch aufgefallen, dass es manchmal Unterschiede in der Dokumentation zwischen pro.arcgis.com und desktop.arcgis.com gibt

Diese Aufgabe hat mir wirklich geholfen, die Nützlichkeit von Tools zu erkennen. Es macht es so einfach, ein Werkzeug zwischen mehreren Funktionen und auch verschiedenen Parametern zu replizieren.


1 Antwort 1

Wenn Ihnen die Zeit am Herzen liegt, sollte die Zeit in Ihrer Datenbank sein. Zeitraum. Möchten Sie einen Fall sehen, in dem die Verwendung einer Sequenz fehlschlagen könnte (ich bin mir nicht sicher, ob dies auch mit MySQL-Autoinkrementen passieren könnte)?

Wenn Sie einen Wert aus einer Sequenz innerhalb einer Transaktion anfordern, ziehen Sie nicht nur den nächsten Wert, die DB reserviert einen ganzen Block von Werten für Sie. Dies geschieht, um den Aufwand für das ordnungsgemäße Sperren der Sequenz und die Handhabung mehrerer gleichzeitiger Verbindungen zu reduzieren. Schauen wir uns diese Abfolge von Ereignissen an:

  • Client Nr. 1 verbindet sich mit dem Server
  • Client #1 fordert einen Wert von einer Sequenz an
  • DB reserviert 1-10 für Client #1, gibt Client #1 den Wert 1
  • Kunde #1 fügt die 1 in eine Tabelle ein
  • Kunde #1 beschließt, etwas zu tun, das einige Zeit in Anspruch nehmen wird
  • Client #2 verbindet sich mit dem Server
  • Client #2 fordert einen Wert aus einer Sequenz an
  • DB reserviert 11-20 für Client #2, gibt Client #2 den Wert 11
  • Kunde #2 fügt die 11 in eine Tabelle ein
  • Client #2 legt fest und trennt die Verbindung
  • Client #1 fordert den nächsten Wert aus der Sequenz an
  • DB gibt Client #1 den Wert 2
  • Kunde #1 fügt 2 in eine Tabelle ein
  • Client #1 legt fest und trennt die Verbindung

Wie ist jetzt der Stand der Datenbank? Sie haben 1, 2 und 11 in Ihrer Tabelle, aber die Zeile mit der 2 ist die neueste. Wenn Sie nach diesem Wert sortieren, erhalten Sie das falsche Ergebnis.


2 Antworten 2

Was Sie vorschlagen, kann mit MySQL nur unter drei (3) Bedingungen sauber durchgeführt werden

  • ZUSTAND #1 : Verwenden Sie die MyISAM-Speicher-Engine
  • ZUSTAND #2 : Machen Sie die Spalte auto_increment zu einem Teil eines zusammengesetzten Primärschlüssels
  • ZUSTAND #3 : Jedes auto_increment für einen bestimmten Typ muss in einer eigenen Zeile vorhanden sein

Hier ist Ihr ursprüngliches Tabellenlayout

Basierend auf den drei gerade erwähnten Bedingungen ist hier das neue vorgeschlagene Tabellenlayout:

Hier ist ein Beispiel über Beispieldaten und SQL:

VORSICHT: Derzeit unterstützt nur die MyISAM-Speicher-Engine mehrere auto_increment-Werte, die mit anderen Spalten gruppiert sind. Dies ist bei InnoDB nicht möglich, das auf auto_increment-Spalten basiert, die direkt an die gen_clust_index (auch bekannt als Clustered Index) .


7 Antworten 7

Wenn Sie ein Steuerelement ausgrauen, teilen Sie mit, dass "etwas derzeit deaktiviert ist, aber möglicherweise verfügbar wird, wenn Sie etwas anderes auf der Seite tun".

Der einzige Nachteil dieses Ansatzes besteht darin, dass die deaktivierten Steuerelemente Platz auf der Seite belegen. Wenn diese deaktivierten Steuerelemente also selten verwendet werden und/oder es viele davon gibt, kann dies zu einer unnötigen visuellen Komplexität für einen sehr geringen Wert führen.

Wenn Sie etwas ausblenden und es nur bei Bedarf aufdecken (progressive Offenlegung), wird sichergestellt, dass die Seite einfach gehalten wird, bis die Umstände die Anzeige zusätzlicher Steuerelemente erfordern.

Der einzige Nachteil dieses Ansatzes ist, dass die Seite angepasst werden muss, um die neu aufgedeckten Steuerelemente anzuzeigen. Es ist unwahrscheinlich, dass der Benutzer von der progressiven Offenlegung überrascht wird, da es sich um ein robustes Interaktionsmuster handelt, das es seit vielen Jahren gibt.

Beide Ansätze sind gültig und haben ihre Vor- und Nachteile. Letztendlich basiert Ihre Entscheidung auf dem Wert der zusätzlichen Kontrollen, der Menge der zusätzlichen Kontrollen und der Häufigkeit ihrer Verwendung.

Warum für jedes Feld ein separates Textfeld, wenn der Benutzer einen Wert nur einmal eingeben kann? Sie haben nur ein einziges Textfeld, um den Wert der ausgewählten Option zu speichern:

Die Beschriftung der Box kann sich je nach ausgewählter Option ändern. Sie können dieses Feld entweder ausblenden, bis sie eine der Optionen ausgewählt haben, oder es einfach als etwas Generisches bezeichnen, damit es auf alle Optionen angewendet werden kann.

Ich kann beide Seiten dieser Designs sehen und denke nicht, dass beides "falsch" ist, aber ich würde immer empfehlen, die Dinge für den Benutzer einfach zu halten. In diesem Fall würde dies bedeuten, dass die Kästchen sichtbar, aber ausgegraut sind.

Dadurch werden zwei Dinge erreicht:

  1. Dem Benutzer ist von vornherein bewusst, dass er zusätzlichen Text nachweisen muss. Wäre das Kästchen ausgeblendet, würde ein Prozentsatz der Benutzer das Kästchen einfach ankreuzen und denken, dass sie fertig sind, nur um sich über den Fehler "Bitte Daten angeben" zu ärgern, der auftauchen würde.
  2. Es gibt weniger technische Bedenken. Ihr Seitenlayout würde sich nicht ändern, wenn Dinge angezeigt werden / Sie müssen sich nicht um das Löschen/Aufbewahren von Daten kümmern. Einfache Dinge, aber sie alle tragen zu den Testbedingungen bei, die für Ihr Produkt erforderlich sind.

Angesichts der Art der Daten, die Sie erfassen, würde ich die Verwendung von Kontrollkästchen im Gegensatz zu Dropdown-Auswahlen in Frage stellen. Sind Kontrollkästchen notwendig? Sie sind immer fummelig, besonders bei Designs für mobile Geräte.

In dem Unternehmen, in dem ich arbeite, möchte das UX-Team immer "jede Eingabe für den Benutzer sichtbar" haben, weil erstens dem Benutzer der gesamte Prozess kommuniziert wird und zweitens ein erscheinendes Feld schwerer zu erkennen ist, was zu vielen Fehlern beim Ausfüllen führt Eingaben vor dem Absenden des Formulars.

Das ist ziemlich immer richtig, aber es gibt natürlich einige Randfälle, zum Beispiel, wenn das Formular wirklich unordentlich ist, dann etwas aufräumen und das Feld erscheinen lassen (auf eine schicke Weise zu sehen) könnte eine bessere Möglichkeit sein.

Wenn Sie sie zuerst ausblenden und sie nach Auswahl eines Optionsfelds anzeigen, müssen Sie angeben, dass dies geschehen wird. Wenn Sie dies nicht tun, erwarten Benutzer möglicherweise nicht, dass dies geschieht, und können verwirrt oder sogar verärgert sein, weil sie "noch eine" Aktion ausführen müssen, um diesen Teil des Formulars auszufüllen.

Wenn Sie nicht eindeutig sagen können, was der nächste Schritt für den Benutzer sein wird, können Sie ihn von Anfang an anzeigen, aber deaktivieren (und zum Beispiel ausgrauen) wahrscheinlich einen besseren Überblick darüber erhalten, was der Benutzer als nächstes tun muss. und bietet so eine bessere Benutzererfahrung.

Wenn wir über eine Webseite sprechen, auf mobilen Geräten mit kleineren Bildschirmen, kann ich mir vorstellen, dass der Ansatz "Ausblenden" problematisch ist.

Meine eigene Gewohnheit beim Surfen auf Mobilgeräten ist es, die Breite des gelesenen Textes an die Bildschirmbreite anzupassen (durch Doppeltippen auf den Text). Auf diese Weise habe ich die maximale Textgröße, ohne viele Informationen darüber zu verlieren, wo ich mich im Dokument (zumindest seitlich) befinde. Wenn Sie sich für den "Ausblenden"-Ansatz entscheiden und Ihre mobilen Benutzer wie ich in den Text hineinzoomen, sehen sie die Textfelder, die bei einer Auswahl erscheinen, zunächst nicht.

Also würde ich sagen 'deaktivieren', nicht 'verstecken'.

Ich würde sie lieber ausblenden und beim Schweben anzeigen. Dies bringt dem Benutzer die Idee, dass er ein Feld auswählen (klicken) muss, um einen Text einzugeben. der Benutzer spielt zuerst mit dem Mauszeiger nach oben und unten und wird sehr leicht feststellen, dass das Eingabefeld bei jedem Klick angezeigt wird.

Ich bin nicht auf der Idee, es vollständig auszublenden, es sei denn, Sie klicken auf . Plötzliches Handeln ist keine gute Praxis. und auch ich komme nicht auf die idee, sie anzuzeigen und zu deaktivieren. Sie fügen Elemente in die Seiten ein, um sie nicht zu deaktivieren. Dies gibt den Eindruck, dass auf der Seite etwas nicht stimmt. und natürlich kombiniere ich nicht alle Optionsfelder mit einem Eingabefeld, da diese Lösung nicht daran denken wird, dass es ein Eingabefeld gibt, das sich darauf bezieht, welches Optionsfeld ich gerade ausgewählt habe, was ist, wenn der Benutzer seine Meinung ändern soll? und wählen Sie ein anderes Optionsfeld aus!!

Meine Lösung ist also zwischen allen anderen Lösungen, versteckt das Eingabefeld und zeigt sie gleichzeitig und die Entscheidung in den Händen des Benutzers. hängen vom Moment seines Zeigers ab.


Sie können keine Parameter an Methodenbindungen, die auf Ihrer Visualforce-Seite erstellt wurden, an Ihren Controller übergeben. Wie im Hilfethema hier beschrieben, können Sie nur die Methoden 'action', 'get' und 'set' bereitstellen.

Um Ihre Anforderung umzusetzen, würde ich Ihnen empfehlen, sich Visualforce-Komponenten anzusehen, damit Sie so etwas wie

Diese Komponente würde intern die apex:outputText-Komponente wie oben verwenden, ihrem Controller wäre jedoch der 'test'-Wert als Attribut an die Komponente übergeben worden. Auf dem Controller hätten Sie einen getFormattedValue, um die formatierte Version auszugeben.