2012-07-27 56 views
0

我對Dojo非常陌生,並且遇到以下問題。Dojo/Dijit問題和表單中的空白選項選擇

<div id="_f_trc_suivi_domain_Pli_conteneurNum_id"> 
      <label for="_conteneurNum_id">Conteneur Num : </label> 
      <select id="_conteneurNum_id" name="conteneurNum"> 
      <option value="">Tous</option> 
       <option value="1">951</option> 
       <option value="2">753</option> 
       <option value="3">753159</option></select><br /> 
      <script type="text/javascript"> 
       Spring.addDecoration(new Spring.ElementDecoration({ 
        elementId : '_conteneurNum_id', 
        widgetType : 'dijit.form.FilteringSelect', 
        widgetAttrs : { 
         hasDownArrow : true 
        } 
       })); 
      </script> 
     </div> 

這導致螢火蟲以下:

<div wairole="combobox" dojoattachpoint="comboNode" 
     id="widget__conteneurNum_id" 
     class="dijit dijitReset dijitInlineTable dijitLeft dijitTextBox dijitComboBox dijitTextBoxError dijitComboBoxError dijitError" 
     role="combobox" widgetid="_conteneurNum_id" 
     aria-labelledby="_conteneurNum_id_label" aria-expanded="false"> 
     <div dojoattachevent="onmousedown:_onArrowMouseDown" 
      wairole="presentation" dojoattachpoint="downArrowNode" 
      class="dijitReset dijitRight dijitButtonNode dijitArrowButton dijitDownArrowButton dijitArrowButtonContainer" 
      role="presentation"> 
      <input type="text" wairole="presentation" readonly="" tabindex="-1" 
       value="? " class="dijitReset dijitInputField dijitArrowButtonInner" 
       role="presentation"> 
     </div> 
     <div class="dijitReset dijitValidationContainer"> 
      <input type="text" wairole="presentation" readonly="" tabindex="-1" 
       value="? " 
       class="dijitReset dijitInputField dijitValidationIcon dijitValidationInner" 
       role="presentation"> 
     </div> 
     <div class="dijitReset dijitInputField dijitInputContainer"> 
      <input type="text" waistate="haspopup-true,autocomplete-list" 
       wairole="textbox" dojoattachpoint="textbox,focusNode" 
       dojoattachevent="onkeypress:_onKeyPress,compositionend" 
       autocomplete="off" class="dijitReset dijitInputInner" 
       role="textbox" aria-haspopup="true" aria-autocomplete="list" 
       id="_conteneurNum_id" tabindex="0" aria-required="true" 
       aria-invalid="true" value="" aria-owns="_conteneurNum_id_popup"><input 
       type="hidden" name="conteneurNum" value=""> 
     </div> 
    </div> 

但不幸的是,它總是顯示上面的一個白色選項

我已經通過彈簧袋鼠選擇產生以下形式空白選項,其值爲「Tous」。

見下GIF:

resulting form field

什麼我收到錯了嗎?任何線索的歡迎。

編輯:我知道肯定的問題在於:<option value="">Tous</option>特別是value=""部分。我可以重新修改和細化我的問題,如下所示:我如何確保Dojo/Dijit正確處理此問題:value="" ??

+0

use dijit.form。選擇而不是FilteringSelect – 2012-07-27 09:44:41

+0

我確實考慮過,但我想了解爲什麼會發生此問題以及該組件如何工作,尤其要記住,如果select中沒有空白選項,則select會正確顯示。 – balteo 2012-07-27 10:39:07

+0

您是否嘗試設置第一個選項的值? 另外爲什麼不直接設置數據dojo類型爲這裏? unludo 2012-07-27 11:20:13

回答

0

只要按照預期將0值。我有下面的代碼沒有問題:

<div id="_f_trc_suivi_domain_Pli_conteneurNum_id"> 
     <label for="_conteneurNum_id">Conteneur Num : </label> 
     <select id="_conteneurNum_id" name="conteneurNum"> 
      <option value="0">Tous</option> 
      <option value="1">951</option> 
      <option value="2">753</option> 
      <option value="3">753159</option> 
      </select><br /> 
     <script type="text/javascript"> 
      Spring.addDecoration(new Spring.ElementDecoration({ 
       elementId : '_conteneurNum_id', 
       widgetType : 'dijit.form.FilteringSelect', 
       widgetAttrs : { 
        hasDownArrow : true 
       } 
      })); 
     </script> 
    </div> 
0

我剛剛發現的MyEclipse 2014摔跤幾個小時後,一個變通方法,春季3.1老道場/ Dijit的版本,我知道這是舊的,但MyEclipse的包的這些舊版本一切都讓人瘋狂。

我試過FilteringSelect,選擇空值,帶有值的html選項,並且替換了干擾項目其餘部分的dojo庫。所以我會在這裏發佈這個如果它可以幫助任何人:

這種情況是常見的,如果你想在你的選擇虛擬提示選項,如' - 選擇項目 - '與空值。 Dojo/dijit版本與MyEclipse打包到spring-js-2.3.1.RELEASE中,用下拉列表中顯示的分隔符替換空值。在Dojo/Dijit的最後幾個版本中,這種行爲似乎可以被糾正,正如你在Craig Swing的小提琴中看到的那樣。

如果你綁定的屬性不是一個字符串,你可以指定一個espace作爲dummy選項的值而不是null,因爲稍後會在控制器中綁定爲null,所以將顯示虛擬選項。例如:

<option selected="selected" value="">Tous</option> 

但是,如果屬性是一個字符串,這樣你將與你的控制器該財產的unwished空白找到。

所以我最終選擇直接修改Select.js

其放置在web應用/資源/的dijit /表格項目/ Select.js評論此行:

/* 
if(!_1.value){ 
return new dijit.MenuSeparator(); 
}else{ 
*/ 
var _2=dojo.hitch(this,"_setValueAttr",_1); 
var _3=new dijit.MenuItem({option:_1,label:_1.label,onClick:_2,disabled:_1.disabled||false}); 
dijit.setWaiRole(_3.focusNode,"listitem"); 
return _3; 
/* 
} 
*/ 

也不要忘記在web.xml中覆蓋資源Servlet的此路徑:

<servlet-mapping> 
    <servlet-name>My Servlet</servlet-name> 
    <url-pattern>/resources/dijit/form/Select.js</url-pattern> 
</servlet-mapping>