FIY我知道這很長,我在這裏有幾個問題,但都是由於我試圖瞭解DOM中的不同部分,一旦我的自定義小部件實例化並添加到DOM,以及它們如何與我的自定義小部件的代碼進行各種關聯。我對此感到非常頭痛,所以如果有人能夠澄清我在這裏的想法,這將是非常好的。 (注意:當然,我已經閱讀了dojo站點上的大量文檔,但有時候仍然很難驗證一些我希望在這篇文章中希望做的事情,以便讓自己放心,我知道什麼是怎麼回事)關於Dojo自定義小部件和DOM的驗證
因此,可以說在標記我已經這樣定義:
<input id="txtPercent" />
我實例化編程方式像這樣在我的單元測試類:
percentTextBoxProgrammatically = new PercentTextBox({
type: "text",
name: "percentEntry",
id: "percentTextBox",
value: 70,
required: true,
//constraints: "{min:1,max:100, places:0}"
//constraints: "{places:0}"
},
dojo.byId("txtPercent"));
percentTextBoxProgrammatically.startup();
而一旦DOM完成渲染,我檢查出通過螢火渲染頁面及其相關的標記,看看這個:
<div id="widget_percentTextBox" class="dijit dijitReset dijitInline dijitLeft dijitTextBox dijitNumberTextBox" role="presentation" widgetid="percentTextBox">
<div class="dijitReset dijitValidationContainer">
<div class="dijitReset dijitInputField dijitInputContainer">
<input id="percentTextBox" class="dijitReset dijitInputInner" type="text" autocomplete="off" data-dojo-attach-point="textbox,focusNode" aria-valuemin="-9000000000000000" aria-valuemax="9000000000000000" tabindex="0" aria-valuenow="70" aria-invalid="false" aria-required="true">
<input type="hidden" name="percentEntry" value="70">
</div>
</div>
文本框顯示70%後,我的格式踢
所以在這裏是我的問題,或只是試圖驗證,如果我在這是正確的:
1)<input id="percentTextBox"...>
- 這是我的實際部件(這是DOM代表)我假設?
2)與#1相關的是,在輸入標記中沒有看到HTML「value」屬性,這在DOM中看不到這個屬性是正常的嗎?例如我沒有看到
<input id="percentTextBox" value="70">
或
<input id="percentTextBox" value="70%">
3)<input type="hidden" name="percentEntry" value="70">
- 所以這是堅持的控件的值屬性的方法嗎?因此,在實例化中設置percentTextbox輸入值後,從那裏開始,隱藏字段用於保留用戶在文本框中進行的任何更改(當它們更改值時)?
4)現在回到我的自定義小部件的代碼,當我使用this.value時,這是隱藏字段(<input type="hidden" ...>
)中的值嗎?
同樣,當我與this.textbox.value工作我假設這是指我的<input id="percentTextBox"...>
這是當前輸入到文本框中的值(你在文本框中看到iself)?
6)我注意到,當我將注意力集中到文本框時,每次我將注意力放在文本框上時,它就會觸發NumberTextBox解析器函數。我想這是預期的?我知道解析器在實例化中起作用,但我想它也會每次(onFocus)重新集中並單擊到文本框中?不知道如何解析工作,但我已經有了例如在數字框和我的自定義的Widget這個分析器功能繼承此NumberTexBox:
_parser: function(/*String*/ expression, /*number.__FormatOptions*/ constraints) {
var i = expression.lastIndexOf("%");
if(i != -1) {
var value = number.parse(expression.substr(0, expression.length-1));
expression = (value * 100).toString();
}
expression = (expression * 100).toString();
return number.parse(expression, constraints);
},
7),以驗證。通過上面的解析器,我假設它解析了我的自定義小部件的this.textbox.value,它對應於<input id="percentTextBox">
的值?所以它在本質上將用戶輸入到文本框中的值(以及通過在其末尾添加%來格式化)並解析該值。還是它解析<input type="hidden" name="percentEntry" value="70">
的隱藏值?
我只是想了解這裏的基礎知識(包括dojo基礎知識和實際的DOM基礎知識),以及如何將所有這些連接在一起,以及什麼是引用或表示DOM與我的實例化小部件以及我的小部件的屬性/屬性等
我明白你的#1,#4,#6等,但我不同意你的一些其他觀點,只是從與Dojo合作一點點,並創建了2-3個定製小部件。在#2,我不同意。如果你想獲得文本框的格式化值(可以說它的格式是%符號),你必須在單元測試或任何試圖處理我的渲染時執行dojo.ById(「percentTextbox」)。get(「value」)小部件。 # – PositiveGuy
#3很明顯,我知道。那不是我所追求的。我也不同意我應該忽略隱藏的領域。因爲我有一個問題,例如我的解析器不斷地將零添加到70的末尾,所以在我第一次將焦點放入文本框後,我最終得到了70000。當控件第一次呈現時,它應該是70%,隱藏值是70。但是當我進入它(onFocus)時,它再次解析並保持* 100。實例化過程中的格式化程序將值除以100以使其返回十進制,解析器將採取該操作並使用* 100轉換回百分比 – PositiveGuy
隱藏的價值確實很重要。因爲在我的小部件中,如果我警告this.get(「value」),它會返回70,但如果我警告this.textbox.value它會顯示0.7。在我的單元測試中,當我檢查dojo.byId(「percentTextbox」).get(「value」)時,它顯示77000,因爲當你回想到文本框的焦點保持* 100時,這不是我想要的。 byId(「PercentTextbox」)。get(「value)」應該給我返回字符串「70%」,這是我在文本框中看到的值。 – PositiveGuy