首先,让我们回忆一下对于组件的讨论:
1.只有配置了applyTo或renderTo属性才会在构建组件时立刻进行render方法的调用;
2.如果是applyTo属性,则会对component的容器进行渲染;renderTo则是对component进行渲染;
现在,让我们看一下render方法的实现:
render : function(container, position){
//如果还没有被渲染 并且beforerender方法返回值为true,则进行渲染,这样,确保了对于组件仅进行一次渲染; position参数指定了组件被插入容器的位置(即在position指定的元素前插入组件)
if(!this.rendered && this.fireEvent("beforerender", this) !== false){
//没有传入任何参数(即未指定容器container)并且设置了this.el,增配置this.container属性
if(!container && this.el){
this.el = Ext.get(this.el);
container = this.el.dom.parentNode;
this.allowDomMove = false;
}
this.container = Ext.get(container);
//如果配置了ctCls,对container进行ctCls的渲染,ctCls(Container Class)是容器的渲染类名,cls(Class)是元素的渲染类名
if(this.ctCls){
this.container.addClass(this.ctCls);
}
this.rendered = true;
//设置position
if(position !== undefined){
if(typeof position == 'number'){
position = this.container.dom.childNodes[position];
}else{
position = Ext.getDom(position);
}
}
//进行onRender方法调用
this.onRender(this.container, position || null);
//如果设置了autoShow,则移除x-hidden和x-hide-hideMode(根据hideMode该属性可以配置为display,visibility,offsets三种属性),从这个方法可以看出,一搬来说,组件创建后缺省的模式为hidden或者none
if(this.autoShow){
this.el.removeClass(['x-hidden','x-hide-' + this.hideMode]);
}
//如果设置了cls,则对元素进行渲染
if(this.cls){
this.el.addClass(this.cls);
delete this.cls;
}
//如果设置了style,则对元素Style属性进行设置
if(this.style){
this.el.applyStyles(this.style);
delete this.style;
}
//触发fireEvent和AfterRender事件
this.fireEvent("render", this);
this.afterRender(this.container);
//如果设置了hidden和disabled则进行相应的处理
if(this.hidden){
this.hide();
}
if(this.disabled){
this.disable();
}
this.initStateEvents();
}
return this;
}
onRender实现的方法如下:
onRender : function(ct, position){
//如果配置了autoEl属性,则根据autoEl属性生成el属性, 如果autoEl属性为字符串,则根据字符串生成元素;否则,则在autoEl指定的元素外包裹一层div元素
if(this.autoEl){
if(typeof this.autoEl == 'string'){
this.el = document.createElement(this.autoEl);
}else{
var div = document.createElement('div');
Ext.DomHelper.overwrite(div, this.autoEl);
this.el = div.firstChild;
}
}
//把position元素插入到el元素前
if(this.el){
this.el = Ext.get(this.el);
if(this.allowDomMove !== false){
ct.dom.insertBefore(this.el.dom, position);
}
}
}
分享到:
相关推荐
您还从React导入了Component: import React , { Component } from 'react' ; 您的组件从扩展Component的类而不是作为函数开始: export default class App extends Component { } 类组件具有render()函数。 ...
像React.js组件一样, Rack::Component实现一个render方法,该方法接受输入数据并返回要显示的内容。 您可以在任何Rack应用程序中使用“组件”来代替“控制器”,“视图”,“模板”和“助手”。 安装 将rack-...
对Web组件的React react-to-webcomponent将组件转换为! 它可以让你分享React组件不需要安装是通过阵营... render ( ) { return < h1> Hello, { this . props . name } < / h1 > ; } } 如下调用reactToWebCompo
5. **生命周期方法(Lifecycle Methods)**:如初始化、更新、销毁等,控制组件在整个应用生命周期中的行为。 在实际开发中,开发者可以根据项目需求,选择使用纯JavaScript或者React、Vue等前端框架来编写组件。...
render ( '# title\n - list item' , { component : { classes : 'flex justify-center' } , textarea : { classes : 'outline w-50 pa3 mr2' } , div : { classes : 'outline w-50 pa3 mr2' }} )原料药// d
React Web组件 使用React创建Web组件 安装 React Web组件可作为npm上的react-web-component软件包使用。 yarn add react-web-component ... render ( ) { return < div> Hello World! < / div > ; } } ReactW
在Vue.js框架中,`props`是父组件向子组件传递数据的一种机制,而`render`函数则是Vue中用于自定义渲染逻辑的关键工具。本文将深入探讨如何利用`props`和`render`函数来实现组件之间的动态嵌套,从而提高应用的灵活...
通过调用一个方法来生成,而这个方法是通过render方法的参数传递给他的; 通过这三个参数,可以生成一个完整的模板 官网实例 //未使用render函数 Vue.component('anchored-heading', { template: '#anchored-...
class MyComponent extends Component { render ( ) { return ( < div> < button onClick = { this . _magicAutoboundMethod } / > < / div > ) ; } _magicAutoboundMethod ( ) { this . setState ( { foo ...
react_componet react_component 是一个小 gem,它... 但是在您的 Render 函数中,您可以使用以下 DSL(公开 React.DOM 中除“var”之外的所有方法;)): div ( null , span ( "Hello" )) 如果您使用 CoffeeScrip
再生组件 一个非常简单和漂亮的ReplAuth 按钮,可以放入 React。 带有预构建的浅色和深色主题样式,您可以轻松切换。... render ( ) { return ( < ReplAuthButton theme = "" { /* default: "dark" */ } messag
React <Frame />组件 这个组件允许您将整个React应用程序或每个组件封装在iFrame中。 npm install --save react-frame-component 如何使用: ...ReactDOM.render( < Header> Hello </ Header> , do
render: h => h(App) }).$mount('#app') ``` 3. **路由配置**:在Vue Router实例中定义路由规则,包括路径、组件和导航守卫等: ```javascript const routes = [ { path: '/', component: Home }, { path: '...
用法示例: import React from 'react'; import BEMBlock from 'react-bem-... render() { return ( >{'John Candy'} ); } } 如果this.props.isActive是真实的,则呈现的输出看起来像这样: <div clas
余烬助手渲染组件 Ember Helper 允许您通过... {{ render-component ' async-button ' action = ' save ' }} 安装 npm install --save-dev ember-helpers-render-component 运行测试 ember test ember test --server
cetc-admin-componentadmin template ...因为依赖了@alifd/next的样式,所以需要引入class Example extends React.Component { render () { return ( <Button>我是一个按钮</Button> ) }}组
条形图和饼图 条形图的React组件 安装 npm install --save bar-chart-simple 用法 import React , { Component } from 'react' import { ChartComponent } from 'bar-chart-simple... render ( ) { return < ChartC
任何组成部分 提供“ react”,“ preact”,“ inferno” h()和Component类以构建与库无关的组件。 安装 $ npm install --save any-... render ( props ) { return ( { props . children } < / div > ) } }
vue通过jwt认证。import Vue from 'vue' import App from './App.vue' import Login from './component/Login.vue' import Home from './component/Home.vue' ... render: h => h(App) }).$mount('#app')
React温度计组件安装$ npm install --save react-thermometer-component观看演示用法import React from 'react'import { render } from 'react-dom'import Thermometer from 'react-thermometer-component'render ( ...