2012-06-29 3 views
0

내 XPage에서 xp:comboBoxdojoType으로 설정하고 dojox.form.CheckedMultiSelect으로 설정했습니다. getComponent("comboBox1").getValue()을 사용하여 SSJS에서 값을 얻으려고하면 null을 반환합니다. dojoType을 제거하면 코드가 작동합니다.XPages에서 dojox.form.CheckedMultiSelect를 사용할 때 값을 얻을 수 없습니다.

<?xml version="1.0" encoding="UTF-8"?> 
<xp:view xmlns:xp="http://www.ibm.com/xsp/core"> 
    <xp:this.resources> 
     <xp:dojoModule name="dojox.form.CheckedMultiSelect"></xp:dojoModule> 
     <xp:styleSheet href="/.ibmxspres/dojoroot/dojox/form/resources/CheckedMultiSelect.css"></xp:styleSheet> 
    </xp:this.resources> 
    <xp:comboBox id="comboBox1" dojoType="dojox.form.CheckedMultiSelect"> 
     <xp:selectItem itemLabel="Untitled 1"></xp:selectItem> 
     <xp:selectItem itemLabel="Untitled 2"></xp:selectItem> 
     <xp:selectItem itemLabel="Untitled 3"></xp:selectItem> 
    </xp:comboBox> 
    <xp:comboBox id="comboBox2"> 
     <xp:selectItem itemLabel="Untitled 1"></xp:selectItem> 
     <xp:selectItem itemLabel="Untitled 2"></xp:selectItem> 
     <xp:selectItem itemLabel="Untitled 3"></xp:selectItem> 
    </xp:comboBox> 
    <xp:button value="Label" id="button1"> 
     <xp:eventHandler event="onclick" submit="true" refreshMode="complete"> 
      <xp:this.action><![CDATA[#{javascript:print("============ " + getComponent("comboBox1").getValue()); 
print("============ " + getComponent("comboBox2").getValue());}]]></xp:this.action> 
     </xp:eventHandler> 
    </xp:button> 
</xp:view> 

I comboBox2 일반 콤보 상자 인 반면 위의 코드 comboBox1dojox.form.CheckedMultiSelect-dojoType 세트가 있습니다 :

여기에 전체 코드입니다. 버튼을 클릭하면 콘솔에 출력되고 comboBox1은 null을 출력합니다.

왜 이런 일이 발생합니까? comboBox1에서 값을 얻으려면 어떻게해야합니까?

답변

1

이것을 달성하기 위해 dojo가이 컨트롤을 다시 작성하는 방법과 관련이 있다고 가정합니다.

<select> 
    <option></option> 
    ... 
</select> 

이 도장 제어 (I가 .getValue을 추측하고있어 서로의 내부는 많은 div의로 분해되어 렌더링하지하는 방법이다 : 당신이 생성 된 소스를 보는 경우에, 콤보 상자 뭔가처럼) 그걸 어떻게 처리해야할지 모를뿐입니다. dojo 스크립트로이 클라이언트 측을 처리해야한다. 작동하는 것 같다 방법은 div의 다수가

data-dojo-attach-point="wrapperDiv" 

와 그 DIV 내부 사업부입니다 내부 div의 각 옵션에 대한 하나의 숫자는, 속성 aria-selected="true"을 갖는 selcted 하나의 사업부가, 당신이 가지고있는 것입니다 이것을 검색하고 내부에서 가치를 얻으십시오. 당신이 값을 끌어 방법을 자세히 도장 문서에서 뭔가를 찾을 수 없다면이다

업데이트 (29) 6 월 2012 (나빈) (나는 할 수 없습니다) :

감사합니다 Simon, 당신은 Dojo 재 작성에 대해 절대적으로 옳았습니다.

dijit.byId("#{id:comboBox1}").get("value") 

나는 onClick 이벤트를 사용하여 필드에 선택된 값을 넣고 다음 서버 측 자바 스크립트에서 해당 필드의 값을 얻고있다 : 나는 아래의 코드를 사용하여 자바 스크립트 클라이언트 측을 사용하여 선택된 값을 얻을 수 있었다. 나는 간단한 일을 위해 많은 일을 알고 있지만 그것은 효과가있다. 더 나은 해결책이 있다면 공유하십시오.

+0

나는 (내 예와 같이) 이미 대답 자신 :) 한 개선을 발견주의 ** 설정 **와 ** ** 당신의 "helperField"의 값을 받고있을 수 있습니다 나는 아래의 예를 붙여 버튼의 submitEvent에. 사용자가 아무런 라디오 버튼을 클릭하지 않고 defaultValue가 설정되어 있지 않으면 onClick 이벤트가 발생하지 않으므로 "helperField"에서 아무 데이터도 설정되지 않습니다. – Dalie

1

참조하는 dojoType에는 아직 SS getValue()가 없습니다. 그러나 값 CS를 얻는 것은 dijit.byId ("id"). getValue()를 사용하면 상당히 간단합니다. hiddenInput의 도움으로 해결 방법을 찾을 수 있습니다.

<xp:comboBox id="comboBox1" dojoType="dojox.form.CheckedMultiSelect"> 
    <xp:selectItem itemLabel="Untitled 1"></xp:selectItem> 
    <xp:selectItem itemLabel="Untitled 2"></xp:selectItem> 
    <xp:selectItem itemLabel="Untitled 3"></xp:selectItem> 
</xp:comboBox> 

<xp:inputHidden id="inputHidden1"></xp:inputHidden> 

<xp:button value="Label" id="button5"> 
    <xp:eventHandler event="onclick" submit="true" 
     refreshMode="complete"> 
     <xp:this.action><![CDATA[#{javascript: 
      print("Submitting: " + getComponent("inputHidden1").getValue()); 
     }]]></xp:this.action> 
     <xp:this.script><![CDATA[dojo.byId("#{id:inputHidden1}").value = dijit.byId("#{id:comboBox1}").getValue();]]></xp:this.script> 
    </xp:eventHandler> 
</xp:button> 
관련 문제