Frage

Eigentlich habe ich der Eigenschaft treu gesetzt. Schreibgeschützt in Xpage Für ein bestimmtes Feld.

Und ich habe versucht, seinen Modus so zu ändern, dass sie im Client -Seite JavaScript bearbeiten. Aber ich kann mich nicht ändern.
Ich habe den folgenden Code verwendet ...

document.getElementById("#{id:read}").readOnly=false; 

und auch

dojo.attr("#{id:read}","readOnly",false); 

Beide sind gescheitert ...

(@Trim)
Also in Server side Javascript XSP Code is:      

<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core" dojoParseOnLoad="true"
dojoTheme="true">
<xp:this.resources>
    <xp:dojoModule name="dijit.Dialog"></xp:dojoModule>
</xp:this.resources>

<div id="dojoTest" dojoType="dijit.Dialog">
<xp:inputText id="field" defaultValue="Hello" readonly="true"></xp:inputText>

<xp:button value="Label" id="button1">
    <xp:eventHandler event="onclick" submit="true"
        refreshMode="partial" refreshId="field">
        <xp:this.action> <![CDATA[{javascript:getComponent("field").setReadonly(false);}]]></xp:this.action>
    </xp:eventHandler></xp:button>
<xp:br></xp:br></div>

<xp:br></xp:br>
<xp:br></xp:br>
<xp:button value="Show Popup" id="button2">
    <xp:eventHandler event="onclick" submit="false">
        <xp:this.script><![CDATA[dijit.byId("dojoTest").show();]]> </xp:this.script>
    </xp:eventHandler></xp:button>
</xp:view>
War es hilfreich?

Lösung

Bei weiterer Überprüfung hat dieses Problem nichts mit dem Feld selbst zu tun: Der in der Frage enthaltene Code ist für die gewünschte Antwort angemessen. Das Problem ist vielmehr, dass das Ereignis in einem Dijit.dialog definiert ist.

Wenn Dojo einen Dialog analysiert, verschiebt es die DOM -Elemente aus Layoutgründen zum Ende des Körpers. Leider bewegt dies auch außerhalb der Form. Dies bricht alle serverseitigen Ereignisse aus, da die Ereignisdaten nicht mehr als Teil des Formulars serialisiert werden. In Ihrem Beispiel scheitert das Ereignis nicht, weil der Ereigniscode falsch ist, sondern weil das Ereignis selbst niemals ausgelöst wird.

Die ideale Lösung hierfür besteht darin, die Dialogkomponente aus der Erweiterungsbibliothek (oder 8.5.3) anstelle eines Passthru -DIV mit einem angegebenen Dojotyp zu verwenden. Wenn dies keine Option ist, gibt es eine Problemumgehung ... fügen Sie die folgende Komponente am Ende der Seite hinzu:

<xp:scriptBlock>
    <xp:this.value><![CDATA[XSP.addOnLoad(function(){
    var dominoForm = XSP.byId("#{javascript:return view.findScriptCollector().getClientId(facesContext);}");
    dojo.query("div.dijitDialog").forEach(function(eachDialog){
        dojo.place(eachDialog, dominoForm, "last");
    });
});]]></xp:this.value>
</xp:scriptBlock>

Dies sollte dazu führen, dass alle analysierten Dialoge wieder in das Formular verschoben werden, sodass Ereignisse in ihnen wieder ordnungsgemäß abfeuern können.

Andere Tipps

Wenn Sie diese Serverseite machen möchten, finden Sie hier ein Beispiel für eine Schaltfläche, mit der der Lese-/Bearbeitungsmodus umschaltet:

var comp = getComponent("inputText1");
if (comp && !comp.isReadonly()) {
    comp.setReadonly(true);
}else if (comp && comp.isReadonly()) {
    comp.setReadonly(false);
}

Sich ansehen Diese Seite Um alle Eigenschaften für alle Komponenten zu sehen, mit denen Sie über SSJs interagieren können.

Durch das Erstellen des Feldes mithilfeu003Cxp:inputText id="read" readonly="true">u003C/xp:inputText>

Der Server erstellt a

u003Cspan id="view:_id1:inputText1">u003C/span>

In 8.5.3 gehen Sie zu allen Eigenschaften auf dem Feld und fügen ein Attribut von Readonly mit einem Wert von True hinzu

Dies würde das folgende Markup erzeugen

<xp:inputText id="read" defaultValue="Marky">
    <xp:this.attrs>
        <xp:attr name="READONLY" value="true"></xp:attr>
    </xp:this.attrs>
</xp:inputText>

In Versionen vor R8.5.3 können Sie das Feld programmgesteuert auf dem Onclientload -Ereignis der Seite zum Feld hinzufügen

dojo.attr ("#{id: read}", "readonly", "true");

Hier ist das Markup

<xp:inputText id="read" defaultValue="Marky">

</xp:inputText>

<xp:eventHandler event="onClientLoad" submit="false">
    <xp:this.script><![CDATA[dojo.attr("#{id:read}", "READONLY", "true");]]></xp:this.script>
</xp:eventHandler>

Sobald Sie das Feld auf dem Formular korrekt erstellt haben

document.getElementById ("#{id: read}"). removeTtribute ('readonly');

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top