<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh-cn">
		<id>http://wiki.tomtalk.net/index.php?action=history&amp;feed=atom&amp;title=ExtJS</id>
		<title>ExtJS - 版本历史</title>
		<link rel="self" type="application/atom+xml" href="http://wiki.tomtalk.net/index.php?action=history&amp;feed=atom&amp;title=ExtJS"/>
		<link rel="alternate" type="text/html" href="http://wiki.tomtalk.net/index.php?title=ExtJS&amp;action=history"/>
		<updated>2026-04-24T09:38:45Z</updated>
		<subtitle>本wiki的该页面的版本历史</subtitle>
		<generator>MediaWiki 1.24.2</generator>

	<entry>
		<id>http://wiki.tomtalk.net/index.php?title=ExtJS&amp;diff=4482&amp;oldid=prev</id>
		<title>Tom：/* store.add() */</title>
		<link rel="alternate" type="text/html" href="http://wiki.tomtalk.net/index.php?title=ExtJS&amp;diff=4482&amp;oldid=prev"/>
				<updated>2016-04-28T08:06:48Z</updated>
		
		<summary type="html">&lt;p&gt;‎&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;store.add()&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==actioncolumn动态显示图标==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
getClass: function (v) {&lt;br /&gt;
    if (v == 'OUTSOURCE') {&lt;br /&gt;
        return '';&lt;br /&gt;
    } else {&lt;br /&gt;
        return this.disabledCls;&lt;br /&gt;
    }&lt;br /&gt;
},&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Extjs 3.4向4.2升级笔记==&lt;br /&gt;
&lt;br /&gt;
===down()用法===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
//示例1&lt;br /&gt;
c.insertPanel.down('button[ref*=btnInsert]').on('click', me._insert, me);&lt;br /&gt;
&lt;br /&gt;
//示例2&lt;br /&gt;
tabs.findById('jobsIpStatusQuery').on('click',me._query,me);&lt;br /&gt;
tabs.down('button[itemId=jobsIpStatusQuery]').on('click',me._query,me);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===spacer===&lt;br /&gt;
extjs4.2中，更名为tbspacer。&lt;br /&gt;
&lt;br /&gt;
===Msg新写法===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
//extjs3.4&lt;br /&gt;
Ext.Msg.ERROR('错误代码：' + response.status + '\n错误描述：' + response.statusText)&lt;br /&gt;
&lt;br /&gt;
//extjs4.2&lt;br /&gt;
Ext.MessageBox.show({&lt;br /&gt;
    title: '错误',&lt;br /&gt;
    msg: '错误代码：' + response.status + '\n错误描述：' + response.statusText,&lt;br /&gt;
    buttons: Ext.MessageBox.OK&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Panel样式配置bodyStyle，用style代替===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
bodyStyle: 'margin: 10px'    //extjs3.4&lt;br /&gt;
style: 'margin: 10px'        //extjs4.2&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===grid store新写法===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var queryResultStore = Ext.create('Ext.data.Store', {&lt;br /&gt;
    pageSize : 10,&lt;br /&gt;
    fields : [ 'id', 'ip', 'reqPerson', 'reqDate', 'appDesc', 'creater', 'ascriptionApp' ],&lt;br /&gt;
    proxy : {&lt;br /&gt;
        type: 'ajax',&lt;br /&gt;
        url : './admin/getApiAuthList.action',&lt;br /&gt;
        extraParams: {}, &lt;br /&gt;
        reader: {&lt;br /&gt;
            type: 'json',&lt;br /&gt;
            root : 'data',&lt;br /&gt;
            totalProperty : 'totalCount'&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===memory proxy===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
//3.4写法&lt;br /&gt;
proxy : new Ext.data.PagingMemoryProxy({&lt;br /&gt;
    data : Ext.value(me.scriptList,[])&lt;br /&gt;
})&lt;br /&gt;
&lt;br /&gt;
//4.2写法&lt;br /&gt;
data: Ext.value(me.scriptList,[]), &lt;br /&gt;
proxy : {&lt;br /&gt;
    type: 'memory',&lt;br /&gt;
    enablePaging: true,&lt;br /&gt;
    reader: {&lt;br /&gt;
        type: 'json',&lt;br /&gt;
        root: &amp;quot;data&amp;quot;,&lt;br /&gt;
        totalProperty : 'totalCount'&lt;br /&gt;
    }&lt;br /&gt;
} &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===sm要改写===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
//extjs 3.4&lt;br /&gt;
var sm = new Ext.grid.RowSelectionModel({&lt;br /&gt;
    handleMouseDown : Ext.emptyFn,&lt;br /&gt;
    singleSelect : true &lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
//ext4.2&lt;br /&gt;
var sm = new Ext.selection.RowModel({&lt;br /&gt;
    handleMouseDown : Ext.emptyFn,&lt;br /&gt;
    mode : &amp;quot;SINGLE&amp;quot;&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===store.add()===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
load : function(store,records){&lt;br /&gt;
    //3.4的写法&lt;br /&gt;
    //var rec = new store.recordType({'id':-1,'applicationName':'请选择业务名'});&lt;br /&gt;
&lt;br /&gt;
    //4.2的写法，直接用对象就可以了。&lt;br /&gt;
    var rec = {'id':-1,'applicationName':'请选择业务名'};&lt;br /&gt;
    store.add([rec]);&lt;br /&gt;
&lt;br /&gt;
    //在列表头插入&lt;br /&gt;
    store.insert(0, [rec]);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===baseParams用extraParams改写===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
//3.4里，在store上编辑属性。&lt;br /&gt;
taskTListStore.baseParams['applicationId'] = -1;&lt;br /&gt;
&lt;br /&gt;
//4.2里，参数移到proxy里了。&lt;br /&gt;
var proxy = taskTListStore.getProxy();&lt;br /&gt;
var params = {&lt;br /&gt;
    name: 'tom'&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
proxy.extraParams['applicationId'] = -1;	&lt;br /&gt;
Ext.apply(proxy.extraParams, params);&lt;br /&gt;
&lt;br /&gt;
taskTListStore.load();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===afterrender事件用boxready代替===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
this.findById('jobCustomListPanel').on('afterrender',this._initJobCustomList,this);&lt;br /&gt;
this.findById('jobCustomListPanel').on('boxready',this._initJobCustomList,this);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===grid rowclick事件用itemclick代替===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
rowclick( Grid this, Number rowIndex, Ext.EventObject e ) &lt;br /&gt;
itemclick( this, record, item, index, e, eOpts )&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===forceFit失效===&lt;br /&gt;
&lt;br /&gt;
3.4里forceFit是写在viewConfig里的，4.2中把forceFit从viewConfig提出来，单独写在外面。&lt;br /&gt;
&lt;br /&gt;
===grid行加复选框===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
//grid配置项&lt;br /&gt;
selType: 'checkboxmodel',  &lt;br /&gt;
&lt;br /&gt;
//删除选中的行&lt;br /&gt;
var sm = gridPanel.getSelectionModel();&lt;br /&gt;
var recs = sm.getSelection();&lt;br /&gt;
gridPanel.getStore().remove(recs);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===grid行拖拽===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
viewConfig: {&lt;br /&gt;
    plugins: {&lt;br /&gt;
        ptype: 'gridviewdragdrop'&lt;br /&gt;
    },&lt;br /&gt;
    listeners: {&lt;br /&gt;
        drop: function () {&lt;br /&gt;
            var sm = stepGrid.getSelectionModel();&lt;br /&gt;
            var store = stepGrid.getStore();&lt;br /&gt;
            var rows = sm.getSelection();&lt;br /&gt;
&lt;br /&gt;
            if (sm.hasSelection()) {&lt;br /&gt;
                var stepIdList = [];&lt;br /&gt;
                store.each(function (item) {&lt;br /&gt;
                    stepIdList.push(item.data.id);&lt;br /&gt;
                });&lt;br /&gt;
&lt;br /&gt;
                Ext.Ajax.request({&lt;br /&gt;
                    url: './jobs/updateTaskT.action',&lt;br /&gt;
                    params: {&lt;br /&gt;
                        &amp;quot;model&amp;quot;: &amp;quot;taskT&amp;quot;,&lt;br /&gt;
                        &amp;quot;jobTemplateId&amp;quot;: _this.initData.jobTemplateId,&lt;br /&gt;
                        &amp;quot;stepIdList&amp;quot;: stepIdList.join(','),&lt;br /&gt;
                        &amp;quot;appID&amp;quot;: _this.initData.applicationId,&lt;br /&gt;
                        &amp;quot;creater&amp;quot;: _this.initData.creater&lt;br /&gt;
                    },&lt;br /&gt;
                    success: function (response, opts) {&lt;br /&gt;
                        if (_this.toolkit.hasPermission(response)) {&lt;br /&gt;
                            _this._loadStepList();&lt;br /&gt;
                            sm.selectRecords(rows);&lt;br /&gt;
                        } else {&lt;br /&gt;
                            _this._loadStepList();&lt;br /&gt;
                        }&lt;br /&gt;
                    },&lt;br /&gt;
                    failure: function (response, opts) {&lt;br /&gt;
                        printMsg('移动步骤时出现异常！异常代码:' + response.status);&lt;br /&gt;
                    }&lt;br /&gt;
                });&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
},&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===container用fieldcontainer代替===&lt;br /&gt;
&lt;br /&gt;
4.2中，container已经没有fieldLabel配置项了，标签配置不会显示，换用fieldcontainer就行了。&lt;br /&gt;
&lt;br /&gt;
===Checkbox===&lt;br /&gt;
&lt;br /&gt;
3.4到4.2用法的不同：&lt;br /&gt;
&lt;br /&gt;
# 赋初值 item.value -&amp;gt; item.inputValue&lt;br /&gt;
# 取选中项 myGroup.getValue() -&amp;gt; myGroup.getChecked()&lt;br /&gt;
# 取值 item.value -&amp;gt; item.inputValue&lt;br /&gt;
&lt;br /&gt;
===用query()代替findByType()===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
//3.4&lt;br /&gt;
grid = tab.findByType('grid'); &lt;br /&gt;
&lt;br /&gt;
//4.2&lt;br /&gt;
grid = tab.query('grid'); &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===infos失效===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html5&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;a class=&amp;quot;infos&amp;quot; ext:qtip=&amp;quot;同步功能说明...&amp;quot;&amp;gt;&amp;lt;/a&amp;gt; &amp;lt;!-- 3.4--&amp;gt;&lt;br /&gt;
&amp;lt;a class=&amp;quot;infos&amp;quot; data-qtip=&amp;quot;同步功能说明...&amp;quot;&amp;gt;&amp;lt;/a&amp;gt; &amp;lt;!-- 4.2--&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===radiogroup初值，用inputValue代替value===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    xtype: 'radiogroup',&lt;br /&gt;
    id: 'exeType',&lt;br /&gt;
    fieldLabel: '执行模式',&lt;br /&gt;
    items: [&lt;br /&gt;
        {boxLabel: '无人模式', name: 'exeType', inputValue: 0},&lt;br /&gt;
        {boxLabel: '单步模式', name: 'exeType', inputValue: 1},&lt;br /&gt;
        {boxLabel: '混合模式', name: 'exeType', inputValue: 2}&lt;br /&gt;
    ]&lt;br /&gt;
},&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===window不显示边框===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
new Ext.Window({&lt;br /&gt;
&lt;br /&gt;
    border: false,                &lt;br /&gt;
    header: false,&lt;br /&gt;
    style: {&lt;br /&gt;
        border: 0,&lt;br /&gt;
        borderStyle: 'none',&lt;br /&gt;
        padding: 0,&lt;br /&gt;
        'border-radius': 0&lt;br /&gt;
    },&lt;br /&gt;
&lt;br /&gt;
    closable: false,&lt;br /&gt;
    modal: true,&lt;br /&gt;
    maximized: true,&lt;br /&gt;
    layout: 'fit',&lt;br /&gt;
    closeAction: 'hide',&lt;br /&gt;
    listeners: {&lt;br /&gt;
        beforeadd: function (ct, cmp, index) {&lt;br /&gt;
            var el = ct.getEl();&lt;br /&gt;
            el.mask('正在加载步骤信息……');&lt;br /&gt;
            (function () {&lt;br /&gt;
                el.unmask();&lt;br /&gt;
            }).defer(1000);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==ajax用法==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
Ext.Ajax.request({&lt;br /&gt;
    url: '/article/save',&lt;br /&gt;
    params: values,&lt;br /&gt;
    success: function (res) {&lt;br /&gt;
        var result = Ext.decode(res.responseText);&lt;br /&gt;
        console.log(result);&lt;br /&gt;
    }&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Extjs 3.4向4.2升级：去除告警信息==&lt;br /&gt;
&lt;br /&gt;
==ExtJS 5 beta 发布==&lt;br /&gt;
&lt;br /&gt;
http://dev.sencha.com/ext/5.0.0/&lt;br /&gt;
&lt;br /&gt;
==Extjs树中CheckBox的选中和取消选中==&lt;br /&gt;
&lt;br /&gt;
在Extjs中treepanel中树节点为checkbox类的节时，有时候我们需要用程序来设置他的选中和取消选中状态。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var nodes=tree.getChecked(); &lt;br /&gt;
if (nodes &amp;amp;&amp;amp; nodes.length) {&lt;br /&gt;
    for (var i=0;i&amp;lt;nodes.length;i++) {&lt;br /&gt;
        nodes[i].getUI().toggleCheck(false); //设置UI状态为未选中状态&lt;br /&gt;
        nodes[i].attributes.checked=false;   //设置节点属性为未选中状态&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
这样通过获取已选择的节点，用程序取消选择状态。反之可以设置未选中节点选中状态。&lt;br /&gt;
&lt;br /&gt;
==在ExtJs的容器中显示图片，并动态更新==&lt;br /&gt;
&lt;br /&gt;
Extjs并没有提供直接的组件来显示图片。&lt;br /&gt;
&lt;br /&gt;
网上通过设置textfield的InputType为Image然后再修改dom对象来实现，其实image的属性值并没有包含在Extjs的官方文档当中。&lt;br /&gt;
&lt;br /&gt;
可以通过以下的思路实现，更可以进一步扩展成自定义组件。推荐的方法如下:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
//首先做一个容器&lt;br /&gt;
{  &lt;br /&gt;
    xtype: 'box', &lt;br /&gt;
    width: 100, &lt;br /&gt;
    height: 200,&lt;br /&gt;
    autoEl: {  &lt;br /&gt;
        tag: 'img', &lt;br /&gt;
        src: 'myphoto.gif'&lt;br /&gt;
    }  &lt;br /&gt;
}  &lt;br /&gt;
&lt;br /&gt;
//动态更新只需要获取到刚才建立的box的dom的src  &lt;br /&gt;
myphoto.getEl().dom.src = newSrc;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==学习笔记==&lt;br /&gt;
&lt;br /&gt;
组件分类：基本组件、工具条组件、表单组件&lt;br /&gt;
&lt;br /&gt;
核心组件：&lt;br /&gt;
*Ext.Component&lt;br /&gt;
*Ext.BoxComponent&lt;br /&gt;
*Ext.Container&lt;br /&gt;
*Ext.Panel&lt;br /&gt;
*Ext.TabPanel&lt;/div&gt;</summary>
		<author><name>Tom</name></author>	</entry>

	</feed>