2016-07-19 7 views
-1

Ich verstehe, wie Sie das Datenattribut in JQuery aus einem HTML-Formular herausziehen, aber kann es innerhalb eines .cfc-Controllers erfolgen, an den ein Formular übergeben wird?Html-Datenattribut in Coldfusion Formularübergabe

page.cfm

<cfform action="controller.cfc" method="getData"> 
    <cfinput name="uploadMyData" type="submit" data-primaryID="123"> 
</cfform> 

Controller.cfc

function getData(rc){ 
    writeDump(rc.uploadMyData.?????(primaryId)????); 
} 

, wenn das Datenattribut nicht sicher, in irgendeiner Weise in der Struktur gespeichert ist. Ich habe versucht, eine getMetaData auf der rc.uploadMyData, aber habe nur eine Liste von Java-Funktionen.

aktualisieren

Adrian J. Moreno

Datenattribute werden Markup nur, dass Auswirkungen, die die interne Datenobjekt des Elements. Sie sind nicht Teil einer Formularanforderung. Sie würden auch kein Formular an eine CFC-Datei senden. Mit Ajax können Sie den Wert aus dem Datenattribut lesen und als Teil des Datenpakets der Anforderung an den Server übergeben.

So in page.cfm

<script type="text/javascript"> 
    var otherData = $("#myForm").serialize(); 
    function sendForm(){ 
     var primaryID = $("#submitData").data("primaryID"); 
     jQuery.post("urlpath/controller/",'{"id":'+''+primaryID+'}', function(dataReturn, status){ 
      //I want to get my form and submit the other data as well to the controller 
     }    
    } 
</script> 

<form id="myForm" action="sendForm()"> 
     <input name="uploadMyData" id="submitData" type="submit" data-primaryID="123"> 
     <input name="importantThing" value="#importantVariable#" type="text"> 
</form> 

gibt sie an den Server als Teil des Datenpakets Anforderung.

Wie würde ich sie zusammen übergeben? Ich möchte diese Formularübermittlung auf eine andere Seite umleiten, damit ich nicht sehe, wie ich den Controller nicht benutzen könnte? Die Formulardaten sollten die Datei newPage.cfc durchlaufen, um sie zu verarbeiten und für die Ausgabe auf newPage.cfm bereit zu machen. Ich benutze Framework eins, aber das ändert nicht viel.

Danke für die Hilfe, was denkst du?

Update 2

Ok, jetzt frage ich mich, warum ich zusammen eine Form sowohl mit Ajax und Coldfusion-Formular Vorlage einreichen möchte? Mir ist klar, dass das nicht getan werden sollte. Ich kann entweder

  1. das Formular über JQuery/Ajax ohne Neuladen der Seite, und umfassen das Datenattribut in der Post-URL und umfassen die serialisierten Formulardaten

page.cfm

<script type="text/javascript"> 
    var otherData = $("#myForm").serialize(); 
    function sendForm(){ 
     var primaryID = $("#submitData").data("primaryID"); 
     jQuery.post("controller/method/?primaryId="+primaryID+"",otherData, function(dataReturn, status){ 
      //do stuff with dataReturn or do a javascript redirect 
     }    
    } 
</script> 

Controller.cfc

function method(requestContext){ 
    //do stuff with that otherData, all stored in request context. includes the primaryID value i appended to the url 
    //send it back to the Page.cfm 
    fw.renderData("rawjson",jsonString,200,""); 
} 

und wenn das wieder in Ordnung war, konnte ich eine Funktion in meiner ursprünglichen Ansicht mit diesen Informationen zurückführen. Wie es auf der Seite anzeigen.

  1. Senden Sie das Formular traditionell, was zu einem Seiten-Reload führen würde. Fügen Sie einen versteckten Eingabetyp mit dem Wert ein, den ich übergeben möchte.

page.cfm

<cfform action="controller.method" method="getData"> 
    <cfinput name="uploadMyData" type="submit" value="Submit Form Button"> 
    <cfinput name="primaryID" type="hidden" value="123"> 
</cfform> 

Controller.cfc

function method(requestContext){ 
    //do stuff with requestContext.primaryID 
    //go to the view method.cfm or do a fw.redirect("new page or back to the page i came from"); 
} 

Warum sollten wir wollen zweimal das Formular abzuschicken? mach einfach das eine oder andere.

+0

Hmm ... wenn es Wert = "123" wäre, dann würde das funktionieren. Das Datenattribut ist mehr eine JS/HTML-Sache. Was passiert, wenn Sie den Formularbereich oder die Metadaten löschen? (fyi - wäre rc.uploadMyData - die Bezeichnung "uploadMyData" würde 123 enthalten). ' –

+5

Datenattribute sind nur Markups, die sich auf das interne Datenobjekt des Elements auswirken. Sie sind nicht Teil einer Formularanforderung. Sie würden auch kein Formular an eine CFC-Datei senden.Mit Ajax können Sie den Wert aus dem Datenattribut lesen und als Teil des Datenpakets der Anforderung an den Server übergeben. –

+0

Oh richtig Adrian - Sie würden den Formularumfang nicht einfach direkt an einen CFC senden. Ein Problem oben ist die Verwendung von cfform - scheint überflüssig ... nicht wirklich, was er anstrebt. –

Antwort

1

Matt, ich glaube, Sie sind verwirrt über eine Reihe von Dingen, die ziemlich einfach zu HTML, JavaScript und jQuery sind und nichts mit ColdFusion zu tun haben.

Beginnen wir mit einem HTML Form.

<form id="{{unique_dom_value}}" action="{{uri}}" method="{{http_verb}}">

  1. unique_dom_value: Einige Zeichenfolge einzigartig für das Dokument. Ermöglicht Ihnen, das gesamte Formularobjekt mithilfe von JavaScript zu referenzieren.
  2. uri: Der URI, an den Sie das Formular zur Verarbeitung senden.
  3. http_verb: Standardeinstellung GET, aber Sie sollten am häufigsten POST verwenden.

Die URI Sie in nur controller.cfc zu schreiben sind versucht, aber das wird nicht alles tun, aber Sie Coldfusion CFC Inspektoren umleiten.

Im Kontext der meisten MVC-Frameworks verwendet index.cfm?event=handler.action das zugrundeliegende Framework, um eine Funktion namens action in einem CFC namens handler aufzurufen. Ohne ein Framework müssen Sie das manuell tun. Wenn Sie also einen CFC namens controller.cfc haben und Ihre Formulardaten an eine Funktion namens myFunction senden möchten, müssen Sie action="controller.cfc?method=myFunction angeben.

Aber das ist auch nicht richtig. Wenn Sie ein Formular absenden, erwartet der Browser, dass der URI geladen wird, der im Attribut action gefunden wurde. Aber Ihre CFC-Funktion reagiert nicht mit HTML, sie antwortet mit etwas anderem. Vielleicht ein Abfrageobjekt, vielleicht JSON. Deshalb würden Sie jQuery.Ajax() verwenden, um die Formulardaten (einschließlich der Datenattributwerte) an die CFC-Funktion zu senden, die Daten in JSON zurückgeben soll. Sobald Sie eine Antwort erhalten, können Sie die Verarbeitung auf derselben Seite fortsetzen oder auf eine andere Seite umleiten.

Da Sie jedoch Framework One verwenden, würde ich in der Dokumentation zur Verwendung renderData() innerhalb einer Ihrer Handler-Funktionen suchen.

+0

Ich habe meine Antwort mit "** Update 2 **" bearbeitet und versucht, Ihre Vorschläge zu verwenden –