如果不在DOM中,浏览器如何知道要渲染什么



我想将ExtJS生成的表单复制到另一个窗口(用于打印),并保留表单值。同样的过程已经适用于轴网。但是,当试图将表单的DOM树复制到另一个窗口中时,表单值会丢失(其他所有内容都会保留,只有字段中的值会丢失)。

因此,现在我正试图弄清楚浏览器如何知道将哪个值呈现到哪个字段中,因为该值不会显示在标记中。

也许我已经老了,但当我开始开发时,输入字段的每个值都存储在DOM中,如下所示:

<input type="text" value="VALUE">

我已经将整个页面的DOM从浏览器控制台复制到文本编辑器中,并搜索表单值,但它们不在那里,所以我100%确信在表单面板之外的某个地方没有隐藏任何东西,即通过绝对定位或任何东西与正确的位置对齐。

那么,如果不在DOM中,浏览器如何知道要渲染什么呢?

问题的简短答案-ExtJS组件(JS对象)和DOM的JS代码中存储的所有数据都只是它的图形表示,可以在需要时更新。

例如,表单(组件)是一个包含所有必要信息的对象,其中DOM不是组件的基础,而只是一种图形表示。在输入数据时,我们会更改组件,并且仅在必要时更改其图形表示。因此,如果我在这个fiddle中创建简单的表单,并设置表单项value: 'myName',那么在这个DOM中,我可以找到inputvalue属性

<input id="textfield-1010-inputEl" data-ref="inputEl" type="text" size="1" name="name" value="myName" role="textbox" aria-hidden="false" aria-disabled="false" aria-readonly="false" aria-invalid="false" aria-required="false" class="x-form-field x-form-text x-form-text-default " autocomplete="off" data-componentid="textfield-1010">

但是如果我用改变它的值

myFormPanel.down('[name=name]').setValue(Math.random());

inputvalue属性将不会更新,表单项组件将更新。

p.S.如果你想知道浏览器是如何呈现页面内容的,那么问题是关于浏览器引擎以及它们如何与JS、HTML等一起工作,你必须阅读这样的文章

最新更新