代码拉取完成,页面将自动刷新
// https://blog.csdn.net/frightingforambition/article/details/50592107
// 先对easyui进行一个扩展
//扩展datagrid:动态添加删除editor
$.extend($.fn.datagrid.methods, {
addEditor : function(jq, param) {
if (param instanceof Array) {
$.each(param, function(index, item) {
var e = $(jq).datagrid('getColumnOption', item.field);
e.editor = item.editor; });
} else {
var e = $(jq).datagrid('getColumnOption', param.field);
e.editor = param.editor;
}
},
removeEditor : function(jq, param) {
if (param instanceof Array) {
$.each(param, function(index, item) {
var e = $(jq).datagrid('getColumnOption', item);
e.editor = {};
});
} else {
var e = $(jq).datagrid('getColumnOption', param);
e.editor = {};
}
}
});
// $("#dg").datagrid('removeEditor','cardNo');//这里的cardNo是需要移除editor的列的field值
1
// 添加:
// $("#dg").datagrid('addEditor',[ //添加cardNo列editor
// {field:'cardNo',editor:{
// type:'textbox',
// options:{
// required:true,
// validType:'length[3,3]',
// invalidMessage:'请输入3位号码!'
// }
// }
// }]
// ————————————————
// 版权声明:本文为CSDN博主「没有梦想-何必远方」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
// 原文链接:https://blog.csdn.net/frightingforambition/article/details/50592107
var client = null;
// 抽象基类对象, 后缀作为具体类的原型
var DicApplyAdd_Scrap = {
initialize: function (argument) {
//this.name = name;
this.doSomething(" initalize");//指向哪里
this.initGrid();
console.table("被初始化了"+arguments[0]);
},
datagrid: {
url:'../datagrid_data1.json',//示例数据
method : 'GET',
get callcal() {
console.log('this :>> ', this);
console.trace();
},
width: '100%',
iconCls: 'icon-search',
rownumbers: true,
showFooter: true,
remoteSort: false,
height: 200,
//nowrap:false,
frozenColumns: [
[
{ field: 'ck', checkbox: true, height: 30 }, //勾選框
{ field: 'productid', title: 'productid', width: 120, height: 30, },
{ field: 'productname', title: 'productname', width: 120, height: 30, },
]
],
columns: [
[
{ field: 'Gr_no', title: 'GR', width: 120, height: 30 },
]
],
toolbar: [
{
//在dategrid表单的头部添加按钮
text: "添加",
iconCls: "icon-add",
handler: function () {
$('#div_Info').dialog("open");
}
},
'-',
{
text: "删除",
iconCls: "icon-remove",
handler: function () {
client.DeleteData();
}
},
'-',
{
text: "導出",
iconCls: "icon-redo",
handler: function () {
client.ToExcel();
}
}
],
onLoadSuccess: function (row) {
//加載成功時,更新加總欄
console.log("加载成功");
client.loadFooter();
},
onAfterEdit: function (rowIndex, rowData, changes) {
//退出編輯時,更新加總欄
console.log("退出编辑");
client.loadFooter();
},
onClickRow: function (rowIndex, rowData) {
// 参考:https://www.jb51.net/article/106201.htm
// $('#dg').datagrid({columns: [ //只用修改变化的。
// [
// { field: 'status', title: 'status', width: 120, height: 30 },
// ]
// ]})// 是可以改变列,而数据是数据保存的。其它的影响就不知道了。
console.log("没有可以只编辑一行的设置吗?");
},
singleSelect: false, //是否单选
pagination: false //分页控件
},
getName: function () {
console.log("getname 输出");
return "base class?";
},
doSomething: function (who) {
console.log("base class do somethin fn"+who);
},
//初始化表格
initGrid: function () {
// 替换方法还是更多细粒度?
console.log("this指向的datagrid是",this.datagrid);
console.log("initGrid");
$("#dg").datagrid(this.datagrid);//this 指向谁?这里是vendor_s
},
SelectData:function () {
console.log("SelectDataing");
}
};
//增加属性与方法。
// strategys
let vendor_s = function () {// 使用this 则变成了构造函数
// this.initialize.apply(this,["vendors_s 构造"]);// 在前,调用的就是原型对象, 因为还没有覆盖this 还没有doSomething()
// 当一个函数用作构造函数时(使用new关键字),它的this被绑定到正在构造的新对象。
this.doSomething = function () { // when vendor is 被new时,函数变成了构造函数。this,此时this指向刚new的出来的。
console.log("具体策略vendor做something");
};
this.datagrid = {...this.datagrid, columns:[...this.datagrid.columns.map(x=> [...x, {field:"unitcost",title:"unitcost ", width: 100, height: 30}])],};//返回修改定义具体的属性。 复制原型链上的datagrid.
this.initialize.apply(this,["调用vendors_s的dosomething "]);// 在后,调用的就是上面的doSomething, 为this指向
};
let GW_s = function(){
this.doSomething = function () { // when vendor is 被new时,函数变成了构造函数。this,此时this指向刚new的出来的。
console.log("具体策略GW_S做something");
};
this.initialize.apply(this,["调用GW_S的dosomething "]);
};
vendor_s.prototype = Object.create(DicApplyAdd_Scrap);// 继承 dic。
GW_s.prototype = Object.create(DicApplyAdd_Scrap)
//context上下文
let Context = function () {
this.strategy = null;
};
Context.prototype = {
setStrategy: function (strategy) {
// this.strategy = new strategy();//可能会内存泄漏/抖动吗?
this.strategy = strategy;
},
exeStrategy: function (params) {
this.strategy.doSomething();
},
getStrategy: function () {
return this.strategy;
}
};
// 实例相关具体策略
const status_is_vendor = new vendor_s();
// const status_is_GW = new GW_s();//不能实例化多个,因为,initgrid会被调用。datagrid只有一个形态。
// 动态修改
console.log( Object.getPrototypeOf(status_is_vendor)=== vendor_s.prototype, Object.getPrototypeOf(status_is_vendor)=== DicApplyAdd_Scrap, );//可以得到原型,然后修改。?? https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/getPrototypeOf
// status_is_vendor.doSomething();
// status_is_GW.doSomething();
// status_is_vendor.getName();
const status_switch = new Context(); //必须new 下面才去原型上找setStrategy这个方法。
status_switch.setStrategy(status_is_vendor);
status_switch.exeStrategy();
let stateChange = function (params) {
let switch_obj = {
1:()=>{
return "this is state 1";
},
2:()=>{
return "this is state 2";
}
}
if(typeof(switchObj[params]) !== 'function') {
return false;
} else {
return switchObj[params]();//执行
}
}
//初始化
$(document).ready(function () {
client = status_is_vendor;//默认状态。
// https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Promise
// https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Guide/Using_promises //
let myPromise = new Promise((resovle,reject)=>{
console.log("promise初始化");
resovle();
}).then((result)=>{
throw new Error("something 不对");
console.log("do this");
}).then(()=>{
console.log("do that");
}).catch(()=>{
console.log("mypromise happen some error");
});
// 更简洁的方式。async和await async函数一定会返回一个promise对象。如果一个async函数的返回值看起来不是promise,那么它将会被隐式地包装在一个promise中。
// async函数的函数体可以被看作是由0个或者多个await表达式分割开来的。从第一行代码直到(并包括)第一个await表达式(如果有的话)都是同步运行的。这样的话,一个不含await表达式的async函数是会同步运行的。然而,如果函数体内有一个await表达式,async函数就一定会异步执行。
function resolveAfter2Seconds() {
return new Promise(resolve => {
setTimeout(() => {
resolve('resolved');
}, 2000);
});
}
async function asyncCall() {
console.log('calling');
const result = await resolveAfter2Seconds();
console.log(result);
// expected output: "resolved"
}
asyncCall().then(()=>{console.log("then ");}).catch(()=>{console.log("some thing error");});
let status = "vendor";
if (status != "0") {
$('#status').val(status);//设置状态
client.SelectData();
}
});
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。