国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

Ext JS動態加載JavaScript創建窗體的方法

2019-11-20 09:37:22
字體:
來源:轉載
供稿:網友

JavaScript不需要編譯即可運行,這讓JavaScript構建的應用程序可以變得很靈活。我們可以根據需要動態從服務器加載JavaScript腳本來創建和控制UI來與用戶交互。下面結合Ext JS來說明如何從服務器上動態加載JS腳本來動態創建窗體。
 1 項目結構:
 項目結構如下:其中GetJSUI一般處理程序用來從數據庫表中抓取UI配置,并返回到客戶端;Contents文件夾下用HTML文件和JS庫等。 

2 數據庫表結構
可以用下面的SQL在MSSQL中創建表,其中JavaScriptContent字段存儲具體的JS腳本。 

CREATE TABLE [dbo].[Ext_Dynamic_Form]( [ID] [nvarchar](50) NOT NULL, [UniName] [nvarchar](50) NULL, [JavaScriptContent] [nvarchar](4000) NULL, [Memo] [nvarchar](200) NULL, CONSTRAINT [PK_Ext_Dynamic_Form] PRIMARY KEY CLUSTERED ( [ID] ASC)) ON [PRIMARY]

創建好后,可以初始化數據:

創建好后,可以初始化數據:

4 GetJSUI 編程 

using System;using System.Collections.Generic;using System.Linq;using System.Web;using CMCloudDBHelper;namespace extjs6.Services{ /// <summary> /// author:jackwangcumt /// </summary> public class GetJSUI : IHttpHandler { public void ProcessRequest(HttpContext context) {  string js = "";  context.Response.ContentType = "text/plain";  //context.Response.ContentType = "text/javascript";  CMCDataAccess da = new CMCDataAccess();  string SQLForJS = "select * FROM Ext_Dynamic_Form where ID='006'";  System.Data.DataTable dt= da.GetDataTable(SQLForJS);  if(dt!=null)  {  if(dt.Rows.Count==1)  {   js = dt.Rows[0]["JavaScriptContent"].ToString();  }  }    //utf-8  context.Response.ContentEncoding = System.Text.Encoding.UTF8;  context.Response.Write(js); } public bool IsReusable {  get  {  return false;  } } }}

5 主界面html 

<html><head> <title>Dynamically generate forms from server javascript</title> <!-- Library Files --> <meta http-equiv="X-UA-Compatible" content="IE=edge" charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"> <script type="text/javascript" src="ext6/ext-all-debug.js"></script> <link rel="stylesheet" type="text/css" href="ext6/classic/theme-triton/resources/theme-triton-all-debug.css"> <script type="text/javascript" src="ext6/classic/theme-triton/theme-triton-debug.js"></script> <script type="text/javascript"> //load *.js file from server function loadScript(url, callback) { var script = document.createElement("script") script.type = "text/javascript"; if (script.readyState) { //IE script.onreadystatechange = function() { if (script.readyState == "loaded" ||  script.readyState == "complete") {  script.onreadystatechange = null;  callback(); } }; } else { //Others script.onload = function() { callback(); }; } script.src = url; document.getElementsByTagName("head")[0].appendChild(script); } //load js text from server function loadScriptSrc(js, callback) { var script = document.createElement("script") script.type = "text/javascript"; //script.async = true; if (script.readyState) { //IE script.onreadystatechange = function() { if (script.readyState == "loaded" ||  script.readyState == "complete") {  script.onreadystatechange = null;  callback(); } }; } else { //Others script.onload = function() { callback(); }; }  script.text = js; console.log(script); document.getElementsByTagName("head")[0].appendChild(script); //不能少 callback(); } //Ext JS 6 Ext.onReady(function() { //https://www.sencha.com/forum/showthread.php?268193-How-to-load-content-dynamically-for-tabpanel var pmain = Ext.widget('panel', { renderTo: document.body, height: 800, width: 800, layout: 'border', items: [{ title: 'West', region: 'west', width: 200, collapsible: true }, { xtype: 'tabpanel', region: 'center', items: [{  title: 'First Tab',  itemId: 'tab01', }, {  title: 'Second Tab',  layout: 'fit',  loader: {  url: 'Form.json',  autoLoad: true,  renderer: 'component'  } }] }] }); //ajax config var reqConfig = {  url: '../Services/GetJSUI.ashx',  method: 'get',  callback: function (options, success, response) {    // var msg = ['success:', success, '/n', 'data:', response.responseText];  // alert(msg.join(''));  loadScriptSrc(response.responseText, function() {  Ext.Msg.alert("loaded js","從服務器加載JS完成");  var gp = Ext.create("gpView");   Ext.ComponentQuery.query('#tab01')[0].add(gp);  });  } }; Ext.Ajax.request(reqConfig); //loadScript("dynamicLoadJS2.js", function() { // Ext.Msg.alert("loaded"); // var gp = Ext.create("gpView"); // //console.log(gp); // //gp.body.renderTo(pmain); // // Ext.ComponentQuery.query('#tab01')[0].add({ // // html: 'Oh, Hello.' // // }); // Ext.ComponentQuery.query('#tab01')[0].add(gp); //}); }); </script></head><body></body></html>

6 運行

 這樣我們可以做一個主框架,然后構建菜單和權限等通用體系,通過在數據庫中配置菜單及UI,可以動態擴展應用。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 和田市| 尤溪县| 广南县| 闽侯县| 阿拉善右旗| 贺兰县| 宜兰市| 奉节县| 双桥区| 新建县| 甘孜县| 景宁| 中山市| 奎屯市| 突泉县| 平度市| 灵山县| 南岸区| 乐安县| 峡江县| 山丹县| 香格里拉县| 澎湖县| 土默特右旗| 股票| 晋城| 哈尔滨市| 丰顺县| 庄河市| 西充县| 麻栗坡县| 观塘区| 友谊县| 织金县| 丹凤县| 长海县| 唐河县| 天津市| 鱼台县| 冕宁县| 嘉黎县|