extjs5 grid 获得选中的某一行的某列值
 Ext.getCmp('eventListGrid').getSelectionModel().getSelection()[0].data.outstandingOperator

想获得获得选中的某一行的某列值,用上面的,报错,Ext.getCmp(...).getSelectionModel is not a function,要怎么改呢?或者还有什么方法可以获得?
(eventListGrid是grid的id,outstandingOperator是要获取的那列,grid用checkboxmodel)

1个回答

检查gridpanel的id都拼写对么有,是区分大小写的,注意是配置id,不是itemId,不要搞错了,配置itemId不能通过Ext.getCmp访问到的,要用父容器.getComponent来获取

而且你组件初始化完毕没有,注意代码执行位置

qq_24534807
qq_24534807 都看清楚了,一样的id,id写在items外面的。
2 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
extjs5.1 grid操作获取详细信息
extjs5.1中,当选中Grid表格中的某一行时,弹出一个form表单,form表单中显示出对应的详细信息。求指点!!!
extjs 中grid设置为可拖拽,每次选择一行数据之后,不能像没有设置拖拽时一样,再次点击行前的选择框取消对该行的选择了
extjs 中grid设置为可拖拽,每次选择一行数据之后,不能像没有设置拖拽时一样,再次点击行前的选择框取消对该行的选择了,只有通过点击别的行的选择框两下,然后才能取消之前那行的选择。如果我不想选中grid的某一行只能点击全选框,全选中之后再点击全取消才行。不知道是什么原因呢?
extjs4 grid 删除行
我的grid是 cellmodel 就是单元格移动 不知道怎么获取选中的行下标 请问有什么办法能删除当前单元格所在的那一行 还有 怎么能改变grid样式风格 默认是浅蓝色的 我想弄成绿色 谢谢各位帮忙说明一下
Extjs grid双击一行时将第2列变为可编辑的文本框
才学的Extjs 版本用的4.2.1的自己写了个demo该怎么改才可以进行编辑?代码如下: var store = Ext.create('Ext.data.Store', { fields : ['numberid', 'id', 'name', 'typename', 'unitname','sum','pl','rk'], data : { items : [ { numberid : '1', id : 'WL-201608160001', name : '联想笔记本', typename : '52a-55', unitname:'台',sum:'12',sum:12 }, { numberid : '2', id : 'WL-201608160002', name : '戴尔笔记本', typename : '52s-55', unitname:'台',sum:'12',sum:12 }, { numberid : '3', id : 'WL-201608160003', name : '苹果笔记本', typename : '52f-55', unitname:'台',sum:'12',pl:"",rk:"" }, ] }, proxy : { type : 'memory', reader : { type : 'json', root : 'items' } } }); var pageToolbar=new Ext.create('Ext.panel.Panel', { height:28, items:[{ xtype: 'textfield', fieldLabel: '合计', inputId:"moneycount",//文本框id inputType:"Text",//input的类型 labelWidth :400,//lable宽度 inputWidth:70,//input宽度 style: { marginTop:"2px", marginLeft:"20px" } }] }); var datagrid=Ext.create('Ext.grid.Panel', { store : store, height:155, width:600, columnLines:true,//是否显示列之间的线条分割 sortable:true,//可以排序 selModel:{ //设置可以选中多行 injectCheckbox:1,//复选框出现的列 mode:"SIMPLE", checkOnly:false//是否只有复选按钮才能选中行 }, selType:"checkboxmodel",//设置复选按钮 autoScroll:true,//设置滚动条 viewConfig:{forceFit:false},//设置滚动条 columns : [ { text : '(栏号)', dataIndex : 'numberid',width: 200 }, { text : '物流编号', dataIndex : 'id', width: 200}, { text : '(物料名称)', dataIndex : 'name' ,width: 300}, { text : '规格型号', dataIndex : 'typename',width: 200 }, { text : '单位', dataIndex : 'unitname',width: 80 }, { text : '数量', dataIndex : 'sum',width: 80 }, { text : '批号', dataIndex : 'pl',width: 80 }, { text : '分录备注', dataIndex : 'rk',width: 80 } ], listeners: { /*click: { element: 'el', //bind to the underlying el property on the panel fn: function(){ alert('click el'); } },*/ dblclick: { element: 'body', //bind to the underlying body property on the panel fn: function(){ alert(Ext.getDom("text1").value); /*alert(Ext.getDom("text2").value); alert(Ext.getDom("text3").value); alert(Ext.getDom("text4").value);*/ //获取选中行 var selArr=datagrid.getSelectionModel().getSelection(); if (selArr && selArr.length>0) { for ( var int = 0; int < selArr.length; int++) { alert(selArr[int].get("id")+"--"+selArr[int].get("name")); } } //获取所有行 /*var selAll=datagrid.data.items; for ( var int = 0; int < selAll.length; int++) { alert(selAll[int].get("id")+"--"+selAll[int].get("name")); }*/ } } }, /* bbar:[{ type: 'button', text: 'Button 1' }],*/ fbar: [ { type: 'button', text: 'Button 1' } ] }); var rowEditing = Ext.create('Ext.grid.plugin.RowEditing',{ clicksToMoveEditor:2, autoCancel:false, listeners:{ beforeedit:function(){ //添加编辑前响应的事件 var rows = datagrid.getSelectionModel().getSelection(); //在编辑前获取选中的行 setTimeout(function(){ datagrid.getselectionModel().select(rows) },0); //延迟执行代码重新勾选编辑前选中的行 } } }); var tabpal=Ext.create('Ext.tab.Panel', { width: 600, height: 180, renderTo: document.body, style:{ marginTop:"80px" }, items: [{ title: '内容', items: [datagrid] }, { title: '备注', }] } ); Ext.onReady(function(){ Ext.create('Ext.window.Window', { title: '调拨单', maximizable:true, minimizable:true, height: 400, width: 600, layout: 'absolute',//布局样式--fit,table, items:[{ xtype: 'textfield', name: 'name12', fieldLabel: '调出仓库', allowBlank: false, // 是否不必输入值 blankText:"请输入",//提示信息 inputId:"text1",//文本框id inputType:"Text",//input的类型 labelWidth :70,//lable宽度 inputWidth:200,//input宽度 style: { marginLeft:'10px', marginTop: '10px' } },{ xtype: 'datefield', name: 'datatime', fieldLabel: '单据日期', allowBlank: false, // 是否不必输入值 blankText:"请输入",//提示信息 labelWidth :70,//lable宽度 inputId:"text2",//文本框id inputWidth:200,//input宽度 format: 'Y-m-d', style: { marginLeft:'300px', marginTop: '10px' } },{ xtype: 'textfield', name: 'name13', fieldLabel: '调入仓库', allowBlank: false, // 是否不必输入值 blankText:"请输入",//提示信息 inputId:"text3",//文本框id inputType:"Text",//input的类型 labelWidth :70,//lable宽度 inputWidth:200,//input宽度 style: { marginLeft:'10px', marginTop: '40px' } },{ xtype: 'textfield', name: 'name124', fieldLabel: '单据号码', allowBlank: false, // 是否不必输入值 inputId:"text4",//文本框id inputType:"Text",//input的类型 labelWidth :70,//lable宽度 inputWidth:200,//input宽度 style: { marginLeft:'300px', marginTop: '40px' } },tabpal] }).show(); });
EXTJS传值问题
请问哪位高手知道如何将EXTJS中将选中一行grid的值传入一个FormPanel面板中。最好能给个示例,谢谢! [b]问题补充:[/b] FormPanel和grid不同时展示,FormPanel需要在一个window下打开
extjs Ext.grid.GridPanel组件使用时不显示数据
一.extjs grid 页面 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>My JSP 'index.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <link rel="stylesheet" type="text/css" href="<%=path %>/ext/resources/css/ext-all.css"/> <script type="text/javascript" src="<%=path %>/ext/adapter/ext/ext-base.js"></script> <script type="text/javascript" src="<%=path %>/ext/ext-all.js"></script> <script type="text/javascript"> Ext.onReady(function(){ //handleMouseDown:Ext.emptyFn此属性去取消单击行选中复选框 singleSelect:true此属性是取消按shft多选 //创建表的列模型 var cm = new Ext.grid.ColumnModel([ {header:'编号',dataIndex:'id',sortable:true}, {header:'名称',dataIndex:'name'}, {header:'描述',dataIndex:'descn'} ]); //创建数据存储对象 var store = new Ext.data.Store({ proxy:new Ext.data.HttpProxy({url:'<%=path%>/data.jsp'}), reader:new Ext.data.JsonReader({ totalProperty:'totalProperty', root:'root' },[ {name:'id'}, {name:'name'}, {name:'descn'} ]) }); //store.load();//如果配置了Ext.PagingToolbar分页工具条 那么store.load()就要在Grid后执行 //用GrinPanel装配 var grid = new Ext.grid.GridPanel({ renderTo:'grid', //渲染范围 loadMask:true, //是否加载提示 store:store, //数据存储对象 cm:cm, //列模型 stripeRows:true, //是否隔行变色 enableColumnMove:true, //列是否可拖拽 enableColumnResize:true,//列宽是否可拖拽改变大小 autoHeight:true, width:700, viewConfig:{ columnsText:'显示的列', scrollOffset:30, sortAscText:'升序', sortDescText:'降序', forceFit:true }, bbar:new Ext.PagingToolbar({ pageSize:6, store:store, displayInfo:true, displayMsg:'显示第{0}条到{1}条记录,一共{2}条', emptyMsg:'没有记录' }) }); store.load({params:{start:1,limit:6}}); }); </script> </head> <body> <div id="grid"></div> </body> </html> 二.提供json数据页面 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>My JSP 'index.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </head> <body> <% String start = request.getParameter("start"); String limit = request.getParameter("limit"); try { int index = Integer.parseInt(start); int pageSize = Integer.parseInt(limit); String json = "{totalProperty:100,root:["; for (int i = index; i < pageSize + index; i++) { json += "{id:" + i + ",name:name" + i + ",descn:descn" + i + "}"; if (i != pageSize + index - 1) { json += ","; } } json += "]}"; out.print(json); } catch (Exception e) { e.printStackTrace(); } %> </body> </html>
mvc模式的extjs4中pannel多选问题(在线等 急)
需求:我需要在查询列表面板panel中添加多选项,并可以通过点击查询面板panel上的按钮获取查询列表面板的所有选中值。 现象:方法一、我使用selModel : new Ext.selection.CheckboxModel(),点击查询面板的按钮可以获取到多选值,通过弹出框显示出来,但是关闭弹出框以后,只能通过表头的多选框进行全选或取消全选,单击列表中的个别行或行前的多选框就没反应; 方法二、我使用selModel : {selType : 'checkboxmodel'},multiSelect:true,点击查询面板的按钮就获取不到多选值了,总提示获取到的值为空。 注意:获取选中项方法我使用的是Ext.widget("bfbRefundSettlementGridView").getSelectionModel().getSelection();不支持getSelections()方法,也不支持getSelection(),也不支持Ext.widget("bfbRefundSettlementGridView").getSelectionModel().getSelection()[0].data方法。 部分代码如下: //定义组件 Ext.define('MB.view.bfbRefundSettlement.BfbRefundSettlementGridView', { extend : "Ext.grid.Panel", alias : 'widget.bfbRefundSettlementGridView', store: "MB.store.BfbRefundSettlementStore", selModel : { selType : 'checkboxmodel' }, multiSelect:true,//允许多选 autoRender:true, columnLines: true, width: '100%', loadMask: true, // 读取数据时的遮罩和提示功能即加载loding... frame: true, resizable: true, forceFit: false, height:500, initComponent : function() { Ext.QuickTips.init(); var sm = new Ext.selection.CheckboxModel(); var me = this; me.columns = [ { text:'序号', xtype: 'rownumberer', width:50 }, { header: '批次号', dataIndex: 'billNo',width: 150,align: 'center'},··· ··· //controller中的按钮方法: var grid = Ext.widget("bfbRefundSettlementGridView"); var records = grid.getSelectionModel().getSelection(); if(records.length==0){ Ext.MessageBox.show({ title:"提示", msg:"请先选择您要操作的行!" }); return; }else{ for(var i = 0; i < records.length; i++){ ids += records[i].get("billNo"); if(i<records.length-1){ ids = ids + ","; } } Ext.MessageBox.alert('提示',ids); } 或者使用方法一 ,使得弹出提示框后仍可以选中获取消个别行,或者使用方法二,可以获取选中行。我看不出问题到底出在哪里,还请各位ext高手指教。
ExtJS4.x 取得当前行的索引
情况如下: Ext.grid.Panel利用这个表格控件读取表格数据,此控件是可以编辑的,然后点击一个下拉框(xtype:'trigger')触发的,然后在弹出来的界面中选择一条数据让名称添加在表格的信息框里即可 [code="java"] //获得弹出界面选中的那条记录 var rowdata = progrid.getSelectionModel().getSelection(); //下拉框所在的那个可编辑表格上,获得当前的索引,就下面这句,返回应该是个Object,现在是空的,我应该怎么取呢,然后用最后一句给赋值 就完事了 var comgridCol = store.getAt(selectindex); comgridCol.set("Rel_ProName",rowdata[0].data.pro_name); [/code]
Ext fireEvent的问题
下面的简单页面中,每点击grid中的某列,就会弹出这个列的单元格的内容 现在的问题是: 刚刚打开这个页面,任何一行都不是选中的, 这个时候我想点击rrrrrr这个button,让button生成一个id,比如是2 根据id=2寻找grid中某个id是2的行,并弹出它的内容? 注意grid中没有任何一行是被点击过的,所以我想使用fireenent,但是调试部出来, 大侠们帮忙啦!!! <script type="text/javascript" src="extjs/adapter/ext/ext-base.js"> </script> <script type="text/javascript" src="extjs/ext-all.js"> </script> <link rel="stylesheet" type="text/css" href="extjs/resources/css/ext-all.css" /> <script type="text/javascript"> Ext.onReady(function(){ var data=[['1','linename111'],['2','linename222'],['3','linename333']]; var store=new Ext.data.SimpleStore({ data:data, fields:['biglineid','linename'] }); var cm = new Ext.grid.ColumnModel([ {header:'路线名称',dataIndex:'linename',sortable:true} ]); var grid = new Ext.grid.GridPanel({ renderTo:"hello", id:'hello_grid', cm:cm, store:store, height:200 }); grid.on('click',function(){ var rec=Ext.getCmp('hello_grid').getSelectionModel().getSelected(); alert(rec.data['linename']); }); }); function test(){ var id=2; Ext.getCmp('hello_grid').fireEvent('click',this); } </script> <div id='hello' > </div> <button onclick="test()">rrrrrr </button>
EXT如何给WINDOW弹窗传值
Ext.onReady(function() { // 设备类型 var devBoxs = [["#1办公楼", "#1办公楼"], ["#2办公楼", "#2办公楼"]] var proxy = new Ext.data.MemoryProxy(devBoxs); var reader = new Ext.data.ArrayReader({}, [{ name : "devTypeName", type : "string", mapping : 0 }, { name : "devTypeName", type : "string", mapping : 1 }]) var store = new Ext.data.Store({ proxy : proxy, reader : reader, autoLoad : true }) var devBoxCombox = new Ext.form.ComboBox({ name : "devTypeCode", width : 220, fieldLabel : "房间位置", hiddenName : "devTypeCode", triggerAction : "all", editable : false, store : store, displayField : "devTypeName", valueField : "devTypeName", emptyText : "please check!", value : "A机房" }) // 设备类型 var devBoxWheres = [["网络组", "网络组"]]; var proxy = new Ext.data.MemoryProxy(devBoxWheres); var reader = new Ext.data.ArrayReader({}, [{ name : "devTypeName", type : "string", mapping : 0 }, { name : "devTypeName", type : "string", mapping : 1 }]) var store = new Ext.data.Store({ proxy : proxy, reader : reader, autoLoad : true }) var devWhereCombox = new Ext.form.ComboBox({ name : "devTypeCode", width : 220, fieldLabel : "所属部门", hiddenName : "devTypeCode", triggerAction : "all", editable : false, store : store, displayField : "devTypeName", valueField : "devTypeName", emptyText : "please check!", value : "36#" }) var roomForm = new Ext.form.FormPanel({ width : 620, autoHeight : true, frame : true, bodyStyle : "padding:5px", layout : "form", labelWidth : 70, labelAlign : "left", items : [{ layout : "column", items : [{ columnWidth : .5, layout : "form", items : [{ name : "linksNo", xtype : "textfield", fieldLabel : "房间名称", allowBlank : false, width : 220, value : "102室", blankText : '不能为空' }] }, { columnWidth : .5, layout : "form", items : devBoxCombox }] }, { layout : "column", items : [ { columnWidth : .5, layout : "form", items : devWhereCombox },{ columnWidth : .5, layout : "form", items : [{ name : "linksModeld", xtype : "textfield", fieldLabel : "负责岗位", width : 220, value : "资产岗", allowBlank : false, blankText : '不能为空' }] }] },{ layout : "form", items : [{ name : "remarkCode", xtype : "textarea", fieldLabel : "备注", width : 519, height:50, value : "网络组专用机房" }] }], buttonAlign : "center", buttons : [{ text : "提交", handler : function() { Ext.Msg.alert("提示", "增加办公室成功!") } }, { text : "重置", handler : function() { roomForm.getForm().reset(); } }, { text : "关闭", handler : function() { roomWin.hide(); } }] }); var roomWin = new Ext.Window({ title : "增加办公室对话框", width : 650, autoHeight : true, closeAction : "hide", maskDisabled : true, plain : false, bodyStyle : "padding:8px", items : roomForm, modal : true, listeners : { close : function(window) { var delObj = document.getElementById(window.button.id); delObj.parentNode.parentNode.removeChild(delObj.parentNode); } } }) // 定义用于表示订单的数组 var data = [{ roomName : "102室", roomAddr : "#1办公楼", roomDept:"网络组", roomUse:"资产岗", devCount : "45", devUse:"13", remark : "网络组工作办公室" }]; // 定义Proxy var proxy = new Ext.data.MemoryProxy(data); var Order = Ext.data.Record.create([{ name : "roomName", type : "string", mapping : "roomName" }, { name : "roomAddr", type : "string", mapping : "roomAddr" }, { name : "devCount", type : "string", mapping : "devCount" }, { name : "devUse", type : "string", mapping : "devUse" }, { name : "roomDept", type : "string", mapping : "roomDept" }, { name : "roomUse", type : "string", mapping : "roomUse" }, { name : "remark", type : "string", mapping : "remark" }]); // 定义Reader var reader = new Ext.data.JsonReader({}, Order); // 定义Store var store = new Ext.data.Store({ proxy : proxy, reader : reader, autoLoad : true, pruneModifiedRecords : true }); // 定义列模型 var cm = new Ext.grid.ColumnModel([{ header : "房间名称", dataIndex : "roomName", width : 100, align : "center", sortable : true }, { header : "房间位置", dataIndex : "roomAddr", width : 90, align : "center", sortable : true }, { header : "归属部门", dataIndex : "roomDept", width : 90, align : "center", sortable : true }, { header : "负责岗", dataIndex : "roomUse", width : 90, align : "center", sortable : true, editor : new Ext.grid.GridEditor(new Ext.form.TextField()) }, { header : "端口数量", dataIndex : "devCount", width : 90, align : "center", sortable : true }, { header : "在用端口数", dataIndex : "devUse", width : 90, align : "center", sortable : true, editor : new Ext.grid.GridEditor(new Ext.form.TextField()) }, { id : "remark", header : "描述", dataIndex : "remark", width : 150, align : "center", sortable : true, editor : new Ext.grid.GridEditor(new Ext.form.TextField()) } ]); // 分页控件 其实分页还是要后台控制的 var pagingBar = new Ext.PagingToolbar({ autoWidth : true, pageSize : 3, displayInfo : true, emptyMsg : "没有数据显示", displayMsg : "显示从{0}条到{1}条数据,共{2}条数据", store : store, loadMask : true }); var search=new Ext.Form.TextField({ emptyText:"请输入房间名称" }); // 定义EditGridPanel var grid = new Ext.grid.GridPanel({ title : "房间列表视窗", store : store, cm : cm, renderTo : "a", autoExpandColumn : "remark", autoWidth : true, height : 300, autoEncode : true, // 提交时是否自动编码 tbar : ["-", { text : "增加房间", icon : "../../../extjs/resources/images/default/dd/drop-add.gif", handler : function() { roomWin.show(); } }, "-", { text : "修改房间", icon : "../../../extjs/resources/images/default/dd/drop-add.gif", cls : "x-btn-text-icon", handler : function() { roomWin.show(); } }, "-", { text : "删除机房", icon : "../../../extjs/resources/images/default/dd/drop-no.gif", cls : "x-btn-text-icon", handler : function() { var sm = grid.getSelectionModel(); if (sm.hasSelection()) { Ext.Msg.confirm("提示", "真的要删除选中的行吗?", function(btn) { if (btn == "yes") { var rsm = grid.getSelectionModel();// 得到行选择模型 var view = grid.getView(); var store = grid.getStore(); for (var i = view.getRows().length - 1; i >= 0; i--) { if (rsm.isSelected(i)) { store.remove(store.getAt(i)); } } view.refresh(); } }); } else { Ext.Msg.alert("错误", "请先选择删除的行,谢谢!"); } } }, "-","->"search,{ text:查询},"-" ], bbar : pagingBar }); grid.addListener('rowdblclick', cellclick); function cellclick(grid, rowIndex, e) { roomstore.remove(roomstore.getAt(0)); //view.refresh(); // devStore.load({params:{start:0, limit:3}}); } }) 1.search框在ttar如何居中 现在是挨着上面了 下面还有一段距离,我想把文本框居中; 2,我选中某一列点击修改时 怎么样把当前行各列的值传入到增加房间的视窗中;
Extjs this.el.dom为空或不是对象
<p>大家好,这个程序,有两处(?????????的地方)有问题,第一处我是想,动态改变form里textfiled的readOnly属性</p> <p>第二处我是想,删除用户选择的记录。</p> <p> </p> <p>Ext.onReady(function(){<br> <br> //当超级管理员点击 "详情" 按钮时,弹出所需要的窗口<br> //record 将用户选中的Record对象,放到record中,然后在放到form里<br>function showWindowForm(text) {<br>    //直接取得选中的行对应的record   <br>    var record = grid.getSelectionModel().getSelected();<br>    if(!record&amp;&amp;(text!="tianJia")){   <br>     Ext.Msg.alert('信息','请选择要编辑的数据');   <br>       return;   <br>    }<br>       win.show(Ext.get(text));<br>       if(text!="tianJia")<br>       form.getForm().loadRecord(record);<br>    <br>}</p> <p>//当点击"添加"、"修改"按钮时,隐藏的form的"确定"按钮显示出来、并同时将"取消"按钮换回来,还要form中的所有textfield元素进入可编辑状态。而当点击"详情"按钮,则反之。<br>function setFormButton(text) {<br>    form.items.each(function eachItem(item,index,length){   <br>                if(item.isXType("textfield")){<br>                   if(text=="xiangQing") <br>                      item.readOnly=true;    //有时这个设置有用,可有时他也没用。不过下面的Button的设置,保证了程序的安全性?????????????????????????<br>                   else <br>                      item.readOnly=false;<br>                }<br>                if (item.items &amp;&amp; item.items.getCount() &gt; 0) {   <br>                     item.items.each(eachItem, this);   <br>                }<br>    },this);<br>    <br>    if(text=="xiangQing") <br>     win.buttons[0].hide();<br>    else <br>     win.buttons[0].show();<br>     <br>    if(text=="xiangQing") <br>     win.buttons[1].setText("确定");<br>    else <br>     win.buttons[1].setText("取消");<br>}</p> <p> <br> //定义store读取数据的格式<br> var DepartmentRecord = new Ext.data.Record.create([<br>  {name: 'id',type: 'int'},<br>  {name: 'name',type: 'string'},<br>  {name: 'description',type: 'string'}<br> ]);<br> //定义行选择模式<br> var sm = new Ext.grid.CheckboxSelectionModel();<br> //定义grid的列模式<br>    var cm = new Ext.grid.ColumnModel([<br>        sm,<br>        {header:'名称',dataIndex:'name'},<br>        {header:'描述',dataIndex:'description'}<br>    ]);</p> <p>    var store = new Ext.data.Store({<br>        proxy: new Ext.data.HttpProxy({url:'../servlet/DepartmentType_list'}),<br>        reader: new Ext.data.JsonReader({<br>            totalProperty: 'totalCount',<br>            root: 'result'<br>        }, DepartmentRecord)<br>    });<br>    //grid 设置 start<br>    var grid = new Ext.grid.GridPanel({<br>        region: 'center',<br>        title: "系部类型列表",<br>        autoHeight: true,<br>        store: store,<br>        cm: cm,<br>        sm: sm,<br>        loadMask: {<br>         msg: "正在载入,请稍等。。。。。"<br>        },<br>        viewConfig: {<br>         forceFit: true  //表格会自动延展每列的长度,使内容填满整个表格<br>        },<br>        tbar: new Ext.Toolbar(<br>        ['-',{<br>           text: '详情',//当超级管理员点击某一行,再点击此按钮,弹出"详情"窗口<br>           id: 'xiangQing',<br>           handler: function(){ showWindowForm("xiangQing");setFormButton("xiangQing") }  <br>        },'-',{<br>           text: '添加',<br>           id: 'tianJia',<br>           handler: function() { showWindowForm("tianJia");setFormButton("tianJia") }   <br>        },'-',{<br>           text: '修改',<br>           id: 'xiuGai',<br>           handler: function() { showWindowForm("xiuGai");setFormButton("xiuGai") }  <br>        },'-',{<br>           text: '删除',<br>           handler: function() {<br>             var record2 = grid.getSelectionModel().getSelected();<br>             if(!record2) {                                                                    <br>              Ext.Msg.alert("信息","请选择您要删除的信息。");                                        <br>             }                                                                                      <br>             else {<br>              form.getForm().loadRecord(record2);<br>              Ext.Msg.confirm('确认对话框','你确定要删除这行信息吗?',function(btn) {            //难道仅仅是因为 form 在 win 里,而不在 grid 里<br>                  if(btn=='yes') {                                                                                        <br>                     form.getForm().submit({                                                                     //就出现 form.getForm().findField("id") 为空或不是对象<br>                  url: '../servlet/DepartmentType_delete',                                             //等问题吗。???????????????????????????<br>                  success: function(f,action) {<br>                   if(action.result.success) {<br>                    Ext.Msg.alert("信息",action.result.msg,function() {<br>                      grid.getStore().reload();<br>                      form.getForm().reset();//清空form上一次提交的数据<br>                    })<br>                   }<br>                  },<br>                  failure: function() {<br>                   Ext.Msg.alert("信息","操作失败");<br>                  }<br>             })<br>                  }<br>              });   <br>             }<br>           }    <br>        },'-']),<br>        bbar: new Ext.PagingToolbar({   //分页工具栏 start<br>            pageSize: 10,<br>            store: store,<br>            displayInfo: true,//显示数据信息<br>            displayMsg: '显示第 {0} 条到 {1} 条记录,一共 {2} 条',<br>            emptyMsg: "没有记录"         //分页工具栏 end<br>        })<br>    });<br>    // grid 设置 end<br>    <br>     store.load({params:{start:0,limit:15}});</p> <p>    // form 设置 start<br>     var form = new Ext.form.FormPanel({<br>        labelAlign: 'right',<br>        labelWidth: 40,<br>        frame: true,<br>        defaults: {<br>             anchor: "90%",<br>             allowBlank: false<br>        },<br>        height: 280,<br>        width: 200,<br>        defaultType: 'textfield',<br>        items: [{<br>           xtype: 'hidden',<br>           name: 'id'<br>        },{<br>          fieldLabel: '名称',<br>          id: 'name',<br>          name: 'name'<br>        },{<br>          fieldLabel: '描述',<br>          name: 'description',<br>          xtype: 'textarea',<br>          height:180,<br>          maxLength: 127<br>        }]<br>    });<br>       //form 设置 end<br>    <br>        //定义所需窗口 window  Start // window 设置 start 此窗口用于存放form<br>      var win = new Ext.Window({<br>        title: '浏览系部类型',<br>        layout: 'fit',<br>        width: 350,<br>        height: 300,<br>        closable: false, //隐藏关闭按钮<br>        modal: true,<br>        plain: true,<br>        buttonAlign: 'center',<br>        items:[form],<br>        buttons: [{<br>           text: '确定',<br>           handler: function() {<br>            if(!form.getForm().isValid()) {<br>             return;<br>            }<br>            var id = form.getForm().findField('id').getValue();<br>            if(id=='') {<br>               form.getForm().submit({<br>               url: '../servlet/DepartmentType_add',<br>               success: function(f,action) {<br>              if(action.result.success) {<br>              Ext.Msg.alert("信息",action.result.msg,function() {<br>                 grid.getStore().reload();<br>                 form.getForm().reset();<br>                 win.hide();<br>               });<br>              }<br>                },<br>                failure: function() {<br>                Ext.Msg.alert("信息","添加失败");<br>                }<br>                });<br>            }<br>            else {<br>               form.getForm().submit({<br>                 url: '../servlet/DepartmentType_fix',<br>                 success: function(f,action) {<br>                  if(action.result.success) {<br>                   Ext.Msg.alert("信息",action.result.msg,function() {<br>                      grid.getStore().reload();<br>                      form.getForm().reset();//清空form上一次提交的数据<br>                      win.hide();<br>                   });<br>                  }<br>                 },<br>                 failure: function() {<br>                  Ext.Msg.alert("信息","修改失败");<br>                 }<br>               }) <br>            }<br>          //  win.hide();<br>           }<br>        },{<br>           text: '取消',<br>           handler: function() {<br>            form.getForm().reset();<br>            win.hide();<br>           }<br>        }]<br>    });  <br>    //   //定义所需窗体 window 设置 end  <br>    </p> <p>    var _viewport = new Ext.Viewport({<br>      layout: 'border',<br>      items: [grid]<br>    });<br> <br>});</p>
如何从一个gridpanel获取数据在另一个gridpanel显示?
[size=xx-small][/size]想问一下,怎样让下面的表格只显示上面表格选中的2行 [b]问题补充:[/b] 我的问题是,是否可以通过var records = grid1.getSelections();记录选中的行信息,然后把这个records数据传递给grid2里面的[align=left][/align]store里面的[align=left][/align]data,这里我不知道怎么处理或者有其他方法吗? [b]问题补充:[/b] [img][/img] [b]问题补充:[/b] [color=darkred][/color][color=darkred][/color] var rowSelect =grid1.getSelectionModel().getSelections();//返回数组 rowSelect[0] rowSelect[1] //返回Record 我能在grid1里直接调用grid2里的store吗? grid2.store.add( rowSelect[0] ); grid2.store.add( rowSelect[1] ); 还是 grid2.getStore.add( rowSelect[0]); grid2.getStore.add( rowSelect[1]); 能不能具体一点,直接能用的,这一块语法我有些晕乎。 [b]问题补充:[/b] 是上面的过滤到下面 [b]问题补充:[/b] 非常感谢大家的帮忙。atian25 给的例子的效果是我想要的。我是要实现组件横排。grid2只能用id返回吧。照着那个例子改了下,现在问题是配置sm1时,运行出错,不知怎么回事?效果如图 [code="java"][/code] <HTML> <HEAD> <TITLE>通过布局嵌套实现表单横排</TITLE> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <link rel="stylesheet" type="text/css" href="../../extjs2.0/resources/css/ext-all.css" /> <script type="text/javascript" src="../../extjs2.0/adapter/ext/ext-base.js"></script> <script type="text/javascript" src="../../extjs2.0/ext-all.js"></script> <script type="text/javascript" src="../../extjs2.0/source/locale/ext-lang-zh_CN.js"></script> <script type="text/javascript" src="Ext.ux.form.StaticTextField.js"></script> <script type="text/javascript"> Ext.onReady(function(){ Ext.BLANK_IMAGE_URL = '../../extjs2.0/resources/images/default/s.gif'; var sm1= new Ext.grid.CheckboxSelectionModel( [color=blue]/* listeners:{ 'rowselect':function(sm,rowIndex,record){ Ext.getCmp('grid2').getStore().add(record); }, 'rowdeselect':function(sm,rowIndex,record){ Ext.getCmp('grid2').getStore().remove(record); } } */[/color] ); var sm2 = new Ext.grid.CheckboxSelectionModel(); var form = new Ext.form.FormPanel({ title:'通过布局嵌套实现表单横排', labelSeparator :':',//分隔符 labelWidth : 50,//标签宽度 bodyStyle:'padding:5 5 5 5',//表单边距 frame : false, height:600, width:600, applyTo :'form', items:[ { xtype : 'panel', layout : 'column',//嵌套列布局 border : false,//不显示边框 height:150, defaults : {//应用到每一个子元素上的配置 border : false,//不显示边框 layout : 'form',//在列布局中嵌套form布局 columnWidth : .9//列宽 }, items : [ { labelSeparator :':',//分隔符 items : { xtype : 'grid', width: 400, height: 140, autoScroll: true, trackMouseOver:false, sm:sm1, columns: [ sm1, {header: '序号', dataIndex: 'id', sortable: true }, {header: '名字', dataIndex: 'name', sortable: true}, {header: '描述', dataIndex: 'descript', sortable: true} ], store:new Ext.data.SimpleStore({ fields:['id','name','descript'], data:[ [1,'name001','this is name001'], [2,'name002','this is name002'], [3,'name003','this is name003'], [4,'name004','this is name004'] ] }) } } ] }, { xtype : 'panel', layout : 'column',//嵌套列布局 border : false,//不显示边框 defaults : {//应用到每一个子元素上的配置 border : false,//不显示边框 layout : 'form',//在列布局中嵌套form布局 columnWidth : .5//列宽 }, items : [ { labelSeparator :':',//分隔符 items : { xtype : 'textfield', fieldLabel:'性别', anchor:'85%' } }, { items : { xtype : 'button', text:'确定' } } ] }, { xtype : 'panel', layout : 'column',//嵌套列布局 border : false,//不显示边框 defaults : {//应用到每一个子元素上的配置 border : false,//不显示边框 layout : 'form'//在列布局中嵌套form布局 }, items : [ { labelSeparator :':',//分隔符 columnWidth :.7, items : { xtype : 'grid', width: 400, height: 140, id:'grid2', autoScroll: true, trackMouseOver:false, sm:sm2, columns: [ sm2, {header: '序号', dataIndex: 'id', sortable: true }, {header: '名字', dataIndex: 'name', sortable: true}, {header: '描述', dataIndex: 'descript', sortable: true} ], store:new Ext.data.SimpleStore({ fields:['id','name','descript'] }) } }, { columnWidth :.3, items : [{ xtype : 'button', text:'查询', handler : function(){} }, { xtype : 'button', text:'删除' } ] } ] } ] }) }); </script> </HEAD> <BODY> <table width=100%> <tr><td>&nbsp;<td></tr> <tr><td width=100></td><td><div id='form'></div><td></tr> </table> </BODY> </HTML> [b]问题补充:[/b] [quote]你是不是要在上面选几个课题组,然后把属于这个课题组的人员在下面的grid中选中? [/quote] 呵呵,其实第二个表格开始是空表,第一个表格选中的加进去就好了。现在那个sm1里面的配置加上后运行不出来,去掉就可以,我也想直接用grid2.getStore().add(record); 不过我用的xtype,这种方式用不了,不知道怎样调用grid2,用Ext.getCmp('grid2').getStore().add(record); 有问题吗?
EXT grid只显示一条数据;
/ 定义Proxy var proxy = new Ext.data.HttpProxy({ url : "plantsAction!getPlantsById.action" }); var Order = Ext.data.Record.create([{ name : "cabinetName", type : "string", mapping : "cabinetName" }, { name : "cabinetNO", type : "string", mapping : "cabinetNO" }, { name : "cabinetModel", type : "string", mapping : "cabinetModel" }, { name : "cabinetLocation", type : "string", mapping : "cabinetLocation" }, { name : "cabinetType", type : "string", mapping : "cabinetType" }, { name : "cabinetDutyRoleName", type : "string", mapping : "cabinetDutyRoleName" }, { name : "cabinetId", type : "string", mapping : "cabinetId" }, { name : "cabinetNotes", type : "string", mapping : "cabinetNotes" }, { name : "id", type : "int", mapping : "id", hidden : true }]); // 定义Reader var reader = new Ext.data.JsonReader({ totalProperty : "totalCount", root : "data" }, Order); // 定义Store var devstore = new Ext.data.Store({ proxy : proxy, reader : reader }); var devBoxAddrs = [["303", "303"], ["405", "405"]]; // 定义列模型 var cm = new Ext.grid.ColumnModel([{ header : "机柜名称", dataIndex : "cabinetName", width : 120, align : "center", sortable : true }, { header : "机柜编号", dataIndex : "cabinetNO", width : 100, align : "center", sortable : true }, { header : "型号", dataIndex : "cabinetModel", width : 90, align : "center", sortable : true }, { header : "位置", dataIndex : "cabinetLocation", width : 100, align : "center", sortable : true }, { header : "规格类别", dataIndex : "cabinetType", width : 120, align : "center", sortable : true }, { header : "负责岗位", dataIndex : "cabinetDutyRoleName", width : 100, align : "center", sortable : true }, { id : "cabinetNotes", header : "描述", dataIndex : "cabinetNotes", width : 150, align : "center", sortable : true } ]); // 分页控件 其实分页还是要后台控制的 var pagingBar = new Ext.PagingToolbar({ autoWidth : true, pageSize : 10, displayInfo : true, emptyMsg : "没有数据显示", displayMsg : "显示从{0}条到{1}条数据,共{2}条数据", store : devstore, loadMask : true }); // 定义EditGridPanel var useGrid = new Ext.grid.GridPanel({ title : "已安装机柜列表视窗", store : devstore, cm : cm, // renderTo:"a", autoExpandColumn : "cabinetNotes", autoWidth : true, // height : 150, autoEncode : true, // 提交时是否自动编码 tbar : ["-", { text : "增加机柜", icon : "../../../extjs/resources/images/default/dd/drop-add.gif", handler : function() { cabWin.show(); } }, "-", { text : "删除机柜", icon : "../../../extjs/resources/images/default/dd/drop-no.gif", cls : "x-btn-text-icon", handler : function() { var sm = useGrid.getSelectionModel(); if (sm.hasSelection()) { Ext.Msg.confirm("提示", "真的要删除选中的行吗?", function(btn) { if (btn == "yes") { var rsm = useGrid.getSelectionModel();// 得到行选择模型 var cabid = 0; var view = useGrid.getView(); var store = useGrid.getStore(); for (var i = view.getRows().length - 1; i >= 0; i--) { if (rsm.isSelected(i)) { cabid = useGrid.getStore().getAt(i) .get("cabinetId") + "," + cabid; store.remove(store.getAt(i)); } } alert(cabid); Ext.Ajax.request({ url : "cabinetAction!deleteCabinet.action?ids=" + cabid, success : function(response, config) { Ext.Msg.alert("提示", "删除客户端成功"); var view = useGrid.getView(); var store = useGrid.getStore(); view.refresh(); alert(useGrid.getStore().getAt(0) .get("cabinetId")); devstore.load({ params : { plantId : useGrid.getStore().getAt(0) .get("cabinetId"), start : 0, limit : 10 } }) }, failure : function() { Ext.Msg.alert("result:", "get failed"); }, method : "get" }) } }); } else { Ext.Msg.alert("错误", "请先选择删除的行,谢谢!"); } } }, "-"], bbar : pagingBar }); 后台输出的JSON数据 {"data":[{"FState":0,"address":"","cabinetDutyRoleId":"1","cabinetDutyRoleName":"系统管理员","cabinetDutyUserID":"1","cabinetDutyUserName":"邢涛 ","cabinetId":"8","cabinetLocation":"36#","cabinetModel":"42U","cabinetNO":"1#","cabinetName":"专用机柜1","cabinetNotes":"888888888","cabinetType":"服务器机柜","countCabinet":0,"createTime":"","creatorId":0,"deptId":0,"deptName":"","id":0,"name":"","notes":"","plantsNO":"","purpose":""},{"FState":0,"address":"","cabinetDutyRoleId":"1","cabinetDutyRoleName":"系统管理员","cabinetDutyUserID":"1","cabinetDutyUserName":"邢涛 ","cabinetId":"2","cabinetLocation":"1","cabinetModel":"1","cabinetNO":"2","cabinetName":"1","cabinetNotes":"1","cabinetType":"1","countCabinet":0,"createTime":"","creatorId":0,"deptId":0,"deptName":"","id":0,"name":"","notes":"","plantsNO":"","purpose":""},{"FState":0,"address":"","cabinetDutyRoleId":"1","cabinetDutyRoleName":"系统管理员","cabinetDutyUserID":"1","cabinetDutyUserName":"邢涛 ","cabinetId":"6","cabinetLocation":"36#","cabinetModel":"42U","cabinetNO":"3#","cabinetName":"专用机柜2","cabinetNotes":"888888888fdsgad","cabinetType":"其他","countCabinet":0,"createTime":"","creatorId":0,"deptId":0,"deptName":"","id":0,"name":"","notes":"","plantsNO":"","purpose":""},{"FState":0,"address":"","cabinetDutyRoleId":"1","cabinetDutyRoleName":"系统管理员","cabinetDutyUserID":"1","cabinetDutyUserName":"邢涛 ","cabinetId":"9","cabinetLocation":"36#","cabinetModel":"42U","cabinetNO":"1#","cabinetName":"专用机柜1","cabinetNotes":"888888888","cabinetType":"服务器机柜","countCabinet":0,"createTime":"","creatorId":0,"deptId":0,"deptName":"","id":0,"name":"","notes":"","plantsNO":"","purpose":""}],"totalCount":4} 但是页面只显示一条了;
函数调用问题,请各位兄弟帮忙!
最近用EXTJS写的一个页面,想实现按钮级别的权限控制,所以用了动态加载的按钮,结果从后台取得的按钮可以显示出来,但是按钮的handler方法不能被执行,在IE中提示错误为“对象不支持此属性或方法”,在FF中提示错误为“this.handler.call is not a function ”下面是相关代码: <br /> <br />js函数--- <br />//新增窗口 ,工具条按钮回调函数 <br /> <span style="color: red">showAddcomp</span>=function(){ <br /> Ext.getCmp("EmpForm").form.reset(); //重置表单 <br /> //EmpForm.form.isJunk.setvalue('2'); <br /> Ext.getCmp("EmpForm").isAdd=true;&nbsp;&nbsp; //设置ISADD附加属性为真 <br /> Ext.getCmp("AddEmpWin").setTitle("新增设备信息") <br /> Ext.getCmp("AddEmpWin").show(); <br /> } <br /> <br /> //编辑窗口 <br /> showEditcomp=function(){ <br /> Ext.getCmp("EmpForm").form.reset(); //重置表单 <br /> Ext.getCmp("EmpForm").isAdd=false;&nbsp;&nbsp; //设置ISADD附加属性为假 <br /> &nbsp;&nbsp;&nbsp; var sel=Ext.getCmp("grid_1").getSelectionModel().getSelected();//取得选中的行对应的record&nbsp;&nbsp; <br /> loadForm(sel.get('Id'));//调用加载表单数据函数 <br /> Ext.getCmp("AddEmpWin").show(); <br /> Ext.getCmp("AddEmpWin").setTitle("修改设备信息") <br /> } <br /> <br /> //动态加载工具条中的按钮 <br /> SetToolButtons=function(tbr) { <br /> Ext.Ajax.request({ <br /> url: 'computer1_getButton.do', <br /> params: '', <br /> method: 'POST', <br /> success: function(response, options){ <br /> var rsp = Ext.util.JSON.decode(response.responseText); <br /> var total = rsp.totalProperty; <br /> var arrays = new Array(total); <br /> for (var i = 0; i &lt; total; i++) { <br /> arrays[i] = new Ext.Toolbar.Button({ text: rsp.result[i].text, iconCls: rsp.result[i].iconCls,<span style="color: red">handler: rsp.result[i].handler</span>,tooltip: rsp.result[i].tooltip}); <br /> alert(rsp.result[i].handler); <br /> } <br /> <br /> tbr.add(arrays); <br /> tbr.addFill();//加入一个充满工具栏的空白元素 <br /> //tbr.addSeparator();//加入工具栏分割符 <br /> tbr.doLayout(); //让工具栏更新布局,解决了在表格渲染时不显示的问题 <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }, <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; failure: function() { <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Ext.Msg.alert("提示信息", "按钮加载失败,请稍后重试!"); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } <br />&nbsp;&nbsp;&nbsp; }); <br /> <br /> }   <br /> <br /> <br />EXTJS控件区--- <br /> Ext.onReady(function(){ <br /> Ext.QuickTips.init(); <br /> Ext.form.Field.prototype.msgTarget='side';//统一指定错误信息的提示方式&nbsp;&nbsp; <br />//生成工具栏 <br /> toolbar= new Ext.Toolbar( <br />/* <br /> [{ <br />      text:'添加', <br />      tooltip:'添加一条记录', <br />      iconCls:'add', <br />     <span style="color: red"> handler:showAddcomp</span> &nbsp;&nbsp; //hidden:true, //隐藏 <br /> &nbsp;&nbsp; //disabled:true // 不可用 <br />    }, '-', { <br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; id:'editButton', <br />      text:'修改', <br />      tooltip:'修改', <br />      iconCls:'option', <br />      handler:handleEdit <br />    },'-',{ <br />      text:'删除', <br />      tooltip:'删除记录', <br />      iconCls:'remove', <br />      handler:handleDelete <br />    }] <br />*/ <br /> ); <br /> <br />//执行函数为工具栏动态附加按钮 <br /> <span style="color: red">SetToolButtons(toolbar); </span> <br /> <br /> <br /> <br />奇怪在new Ext.Toolbar中定义的按钮可以执行动作,但用SetToolButtons函数动态加载的按钮就不行,是不是作用域的问题呀,帮帮我吧,兄弟们!!
Java学习的正确打开方式
在博主认为,对于入门级学习java的最佳学习方法莫过于视频+博客+书籍+总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现学习的最好方式就是阅读参考官方文档其次就是国内的书籍,博客次之,这又是一个层次了,这里暂时不提后面再谈。博主将为各位入门java保驾护航,各位只管冲鸭!!!上天是公平的,只要不辜负时间,时间自然不会辜负你。 何谓学习?博主所理解的学习,它
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过
大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了
大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、PDF搜索网站推荐 对于大部
linux系列之常用运维命令整理笔录
本博客记录工作中需要的linux运维命令,大学时候开始接触linux,会一些基本操作,可是都没有整理起来,加上是做开发,不做运维,有些命令忘记了,所以现在整理成博客,当然vi,文件操作等就不介绍了,慢慢积累一些其它拓展的命令,博客不定时更新 顺便拉下票,我在参加csdn博客之星竞选,欢迎投票支持,每个QQ或者微信每天都可以投5票,扫二维码即可,http://m234140.nofollow.ax.
Vue + Spring Boot 项目实战(十四):用户认证方案与完善的访问拦截
本篇文章主要讲解 token、session 等用户认证方案的区别并分析常见误区,以及如何通过前后端的配合实现完善的访问拦截,为下一步权限控制的实现打下基础。
比特币原理详解
一、什么是比特币 比特币是一种电子货币,是一种基于密码学的货币,在2008年11月1日由中本聪发表比特币白皮书,文中提出了一种去中心化的电子记账系统,我们平时的电子现金是银行来记账,因为银行的背后是国家信用。去中心化电子记账系统是参与者共同记账。比特币可以防止主权危机、信用风险。其好处不多做赘述,这一层面介绍的文章很多,本文主要从更深层的技术原理角度进行介绍。 二、问题引入  假设现有4个人
程序员接私活怎样防止做完了不给钱?
首先跟大家说明一点,我们做 IT 类的外包开发,是非标品开发,所以很有可能在开发过程中会有这样那样的需求修改,而这种需求修改很容易造成扯皮,进而影响到费用支付,甚至出现做完了项目收不到钱的情况。 那么,怎么保证自己的薪酬安全呢? 我们在开工前,一定要做好一些证据方面的准备(也就是“讨薪”的理论依据),这其中最重要的就是需求文档和验收标准。一定要让需求方提供这两个文档资料作为开发的基础。之后开发
网页实现一个简单的音乐播放器(大佬别看。(⊙﹏⊙))
今天闲着无事,就想写点东西。然后听了下歌,就打算写个播放器。 于是乎用h5 audio的加上js简单的播放器完工了。 欢迎 改进 留言。 演示地点跳到演示地点 html代码如下`&lt;!DOCTYPE html&gt; &lt;html&gt; &lt;head&gt; &lt;title&gt;music&lt;/title&gt; &lt;meta charset="utf-8"&gt
Python十大装B语法
Python 是一种代表简单思想的语言,其语法相对简单,很容易上手。不过,如果就此小视 Python 语法的精妙和深邃,那就大错特错了。本文精心筛选了最能展现 Python 语法之精妙的十个知识点,并附上详细的实例代码。如能在实战中融会贯通、灵活使用,必将使代码更为精炼、高效,同时也会极大提升代码B格,使之看上去更老练,读起来更优雅。 1. for - else 什么?不是 if 和 else 才
数据库优化 - SQL优化
前面一篇文章从实例的角度进行数据库优化,通过配置一些参数让数据库性能达到最优。但是一些“不好”的SQL也会导致数据库查询变慢,影响业务流程。本文从SQL角度进行数据库优化,提升SQL运行效率。 判断问题SQL 判断SQL是否有问题时可以通过两个表象进行判断: 系统级别表象 CPU消耗严重 IO等待严重 页面响应时间过长
2019年11月中国大陆编程语言排行榜
2019年11月2日,我统计了某招聘网站,获得有效程序员招聘数据9万条。针对招聘信息,提取编程语言关键字,并统计如下: 编程语言比例 rank pl_ percentage 1 java 33.62% 2 c/c++ 16.42% 3 c_sharp 12.82% 4 javascript 12.31% 5 python 7.93% 6 go 7.25% 7
通俗易懂地给女朋友讲:线程池的内部原理
餐厅的约会 餐盘在灯光的照耀下格外晶莹洁白,女朋友拿起红酒杯轻轻地抿了一小口,对我说:“经常听你说线程池,到底线程池到底是个什么原理?”我楞了一下,心里想女朋友今天是怎么了,怎么突然问出这么专业的问题,但做为一个专业人士在女朋友面前也不能露怯啊,想了一下便说:“我先给你讲讲我前同事老王的故事吧!” 大龄程序员老王 老王是一个已经北漂十多年的程序员,岁数大了,加班加不动了,升迁也无望,于是拿着手里
经典算法(5)杨辉三角
写在前面: 我是 扬帆向海,这个昵称来源于我的名字以及女朋友的名字。我热爱技术、热爱开源、热爱编程。技术是开源的、知识是共享的。 这博客是对自己学习的一点点总结及记录,如果您对 Java、算法 感兴趣,可以关注我的动态,我们一起学习。 用知识改变命运,让我们的家人过上更好的生活。 目录一、杨辉三角的介绍二、杨辉三角的算法思想三、代码实现1.第一种写法2.第二种写法 一、杨辉三角的介绍 百度
腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹?
昨天,有网友私信我,说去阿里面试,彻底的被打击到了。问了为什么网上大量使用ThreadLocal的源码都会加上private static?他被难住了,因为他从来都没有考虑过这个问题。无独有偶,今天笔者又发现有网友吐槽了一道腾讯的面试题,我们一起来看看。 腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹? 在互联网职场论坛,一名程序员发帖求助到。二面腾讯,其中一个算法题:64匹
面试官:你连RESTful都不知道我怎么敢要你?
面试官:了解RESTful吗? 我:听说过。 面试官:那什么是RESTful? 我:就是用起来很规范,挺好的 面试官:是RESTful挺好的,还是自我感觉挺好的 我:都挺好的。 面试官:… 把门关上。 我:… 要干嘛?先关上再说。 面试官:我说出去把门关上。 我:what ?,夺门而去 文章目录01 前言02 RESTful的来源03 RESTful6大原则1. C-S架构2. 无状态3.统一的接
为啥国人偏爱Mybatis,而老外喜欢Hibernate/JPA呢?
关于SQL和ORM的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行了一番讨论,感触还是有一些,于是就有了今天这篇文。 声明:本文不会下关于Mybatis和JPA两个持久层框架哪个更好这样的结论。只是摆事实,讲道理,所以,请各位看官勿喷。 一、事件起因 关于Mybatis和JPA孰优孰劣的问题,争论已经很多年了。一直也没有结论,毕竟每个人的喜好和习惯是大不相同的。我也看
SQL-小白最佳入门sql查询一
一 说明 如果是初学者,建议去网上寻找安装Mysql的文章安装,以及使用navicat连接数据库,以后的示例基本是使用mysql数据库管理系统; 二 准备前提 需要建立一张学生表,列分别是id,名称,年龄,学生信息;本示例中文章篇幅原因SQL注释略; 建表语句: CREATE TABLE `student` ( `id` int(11) NOT NULL AUTO_INCREMENT, `
项目中的if else太多了,该怎么重构?
介绍 最近跟着公司的大佬开发了一款IM系统,类似QQ和微信哈,就是聊天软件。我们有一部分业务逻辑是这样的 if (msgType = "文本") { // dosomething } else if(msgType = "图片") { // doshomething } else if(msgType = "视频") { // doshomething } else { // dosho
“狗屁不通文章生成器”登顶GitHub热榜,分分钟写出万字形式主义大作
一、垃圾文字生成器介绍 最近在浏览GitHub的时候,发现了这样一个骨骼清奇的雷人项目,而且热度还特别高。 项目中文名:狗屁不通文章生成器 项目英文名:BullshitGenerator 根据作者的介绍,他是偶尔需要一些中文文字用于GUI开发时测试文本渲染,因此开发了这个废话生成器。但由于生成的废话实在是太过富于哲理,所以最近已经被小伙伴们给玩坏了。 他的文风可能是这样的: 你发现,
程序员:我终于知道post和get的区别
IT界知名的程序员曾说:对于那些月薪三万以下,自称IT工程师的码农们,其实我们从来没有把他们归为我们IT工程师的队伍。他们虽然总是以IT工程师自居,但只是他们一厢情愿罢了。 此话一出,不知激起了多少(码农)程序员的愤怒,却又无可奈何,于是码农问程序员。 码农:你知道get和post请求到底有什么区别? 程序员:你看这篇就知道了。 码农:你月薪三万了? 程序员:嗯。 码农:你是怎么做到的? 程序员:
《程序人生》系列-这个程序员只用了20行代码就拿了冠军
你知道的越多,你不知道的越多 点赞再看,养成习惯GitHub上已经开源https://github.com/JavaFamily,有一线大厂面试点脑图,欢迎Star和完善 前言 这一期不算《吊打面试官》系列的,所有没前言我直接开始。 絮叨 本来应该是没有这期的,看过我上期的小伙伴应该是知道的嘛,双十一比较忙嘛,要值班又要去帮忙拍摄年会的视频素材,还得搞个程序员一天的Vlog,还要写BU
加快推动区块链技术和产业创新发展,2019可信区块链峰会在京召开
      11月8日,由中国信息通信研究院、中国通信标准化协会、中国互联网协会、可信区块链推进计划联合主办,科技行者协办的2019可信区块链峰会将在北京悠唐皇冠假日酒店开幕。   区块链技术被认为是继蒸汽机、电力、互联网之后,下一代颠覆性的核心技术。如果说蒸汽机释放了人类的生产力,电力解决了人类基本的生活需求,互联网彻底改变了信息传递的方式,区块链作为构造信任的技术有重要的价值。   1
程序员把地府后台管理系统做出来了,还有3.0版本!12月7号最新消息:已在开发中有github地址
第一幕:缘起 听说阎王爷要做个生死簿后台管理系统,我们派去了一个程序员…… 996程序员做的梦: 第一场:团队招募 为了应对地府管理危机,阎王打算找“人”开发一套地府后台管理系统,于是就在地府总经办群中发了项目需求。 话说还是中国电信的信号好,地府都是满格,哈哈!!! 经常会有外行朋友问:看某网站做的不错,功能也简单,你帮忙做一下? 而这次,面对这样的需求,这个程序员
Android 9.0系统新特性,对刘海屏设备进行适配
其实Android 9.0系统已经是去年推出的“老”系统了,这个系统中新增了一个比较重要的特性,就是对刘海屏设备进行了支持。一直以来我也都有打算针对这个新特性好好地写一篇文章,但是为什么直到拖到了Android 10.0系统都发布了才开始写这篇文章呢?当然,一是因为我这段时间确实比较忙,今年几乎绝大部分的业余时间都放到写新书上了。但是最主要的原因并不是这个,而是因为刘海屏设备的适配存在一定的特殊性
网易云6亿用户音乐推荐算法
网易云音乐是音乐爱好者的集聚地,云音乐推荐系统致力于通过 AI 算法的落地,实现用户千人千面的个性化推荐,为用户带来不一样的听歌体验。 本次分享重点介绍 AI 算法在音乐推荐中的应用实践,以及在算法落地过程中遇到的挑战和解决方案。 将从如下两个部分展开: AI 算法在音乐推荐中的应用 音乐场景下的 AI 思考 从 2013 年 4 月正式上线至今,网易云音乐平台持续提供着:乐屏社区、UGC
【技巧总结】位运算装逼指南
位算法的效率有多快我就不说,不信你可以去用 10 亿个数据模拟一下,今天给大家讲一讲位运算的一些经典例子。不过,最重要的不是看懂了这些例子就好,而是要在以后多去运用位运算这些技巧,当然,采用位运算,也是可以装逼的,不信,你往下看。我会从最简单的讲起,一道比一道难度递增,不过居然是讲技巧,那么也不会太难,相信你分分钟看懂。 判断奇偶数 判断一个数是基于还是偶数,相信很多人都做过,一般的做法的代码如下
日均350000亿接入量,腾讯TubeMQ性能超过Kafka
整理 | 夕颜出品 | AI科技大本营(ID:rgznai100) 【导读】近日,腾讯开源动作不断,相继开源了分布式消息中间件TubeMQ,基于最主流的 OpenJDK8开发的
8年经验面试官详解 Java 面试秘诀
    作者 | 胡书敏 责编 | 刘静 出品 | CSDN(ID:CSDNnews) 本人目前在一家知名外企担任架构师,而且最近八年来,在多家外企和互联网公司担任Java技术面试官,前后累计面试了有两三百位候选人。在本文里,就将结合本人的面试经验,针对Java初学者、Java初级开发和Java开发,给出若干准备简历和准备面试的建议。   Java程序员准备和投递简历的实
面试官如何考察你的思维方式?
1.两种思维方式在求职面试中,经常会考察这种问题:北京有多少量特斯拉汽车? 某胡同口的煎饼摊一年能卖出多少个煎饼? 深圳有多少个产品经理? 一辆公交车里能装下多少个乒乓球? 一
碎片化的时代,如何学习
今天周末,和大家聊聊学习这件事情。 在如今这个社会,我们的时间被各类 APP 撕的粉碎。 刷知乎、刷微博、刷朋友圈; 看论坛、看博客、看公号; 等等形形色色的信息和知识获取方式一个都不错过。 貌似学了很多,但是却感觉没什么用。 要解决上面这些问题,首先要分清楚一点,什么是信息,什么是知识。 那什么是信息呢? 你一切听到的、看到的,都是信息,比如微博上的明星出轨、微信中的表情大战、抖音上的...
so easy! 10行代码写个"狗屁不通"文章生成器
前几天,GitHub 有个开源项目特别火,只要输入标题就可以生成一篇长长的文章。背后实现代码一定很复杂吧,里面一定有很多高深莫测的机器学习等复杂算法不过,当我看了源代码之后这程序不到50
知乎高赞:中国有什么拿得出手的开源软件产品?(整理自本人原创回答)
知乎高赞:中国有什么拿得出手的开源软件产品? 在知乎上,有个问题问“中国有什么拿得出手的开源软件产品(在 GitHub 等社区受欢迎度较好的)?” 事实上,还不少呢~ 本人于2019.7.6进行了较为全面的 回答 - Bravo Yeung,获得该问题下回答中得最高赞(236赞和1枚专业勋章),对这些受欢迎的 Github 开源项目分类整理如下: 分布式计算、云平台相关工具类 1.SkyWalk
MySQL数据库总结
文章目录一、数据库简介二、MySQL数据类型(5.5版本)三、Sql语句(1)Sql语句简介(2)数据定义语言DDLcreate,alter,drop(3)数据操纵语言DMLupdate,insert,delete(4)数据控制语言DCLgrant,revoke(5)数据查询语言DQLselect(6)分组查询与分页查询group by,limit四、完整性约束(单表)五、多表查询六、MySQL数
记一次腾讯面试:进程之间究竟有哪些通信方式?如何通信? ---- 告别死记硬背
有一次面试的时候,被问到进程之间有哪些通信方式,不过由于之前没深入思考且整理过,说的并不好。想必大家也都知道进程有哪些通信方式,可是我猜很多人都是靠着”背“来记忆的,所以今天的这篇文章,讲给大家详细着讲解他们是如何通信的,让大家尽量能够理解他们之间的区别、优缺点等,这样的话,以后面试官让你举例子,你也能够顺手拈来。 1、管道 我们来看一条 Linux 的语句 netstat -tulnp | gr...
相关热词 c# 输入ip c# 乱码 报表 c#选择结构应用基本算法 c# 收到udp包后回包 c#oracle 头文件 c# 序列化对象 自定义 c# tcp 心跳 c# ice连接服务端 c# md5 解密 c# 文字导航控件
立即提问