zoukankan      html  css  js  c++  java
  • [ExtJS5学习笔记]第三十一节 sencha extjs 5使用cmd生成的工程部署到tomcat服务器

    本文地址:http://blog.csdn.net/sushengmiyan/article/details/42940883

    本文作者:sushengmiyan

    ------------------------------------------------------------------------------------------------------------------------------------

    使用sencha cmd build app 生成的工程,我们期望只使用cmd打包好之后的那一个压缩后的js,而不用将体积庞大的所有ext代码都部署。

    试了一下ext的官方例子,打包之后,我们使用buildproductionyourappname 目录下的文件都可以了。将这个目录下的文件部署到tomcat下,增加WEBINFO和下面的web.xml文件。启动tomcat.

    使用cmd生成默认的例子,部署了一下,发现可以正常运行。


    总结一下:使用纯净的ext产生的文件,使用cmd打包之后,将所有文件都压缩了,在没有涉及到后台交互的情况下,直接将build下那个工程的文件拷贝到tomcat即可正常运行你所编写的程序,而且这样,也不会将你的源代码直接发布。


    提交一个部署中遇到的问题,打包之后,发布到tomcat 启动报错,内容如下:

    NetworkError: 404 Not Found - 
    
    http://localhost:8080/extoa/.js?doc=142183145561
    
    TypeError: c is not a constructor
    return new c(a[0])


    深入查看后,发现问题出在我使用了ext.define动态去创建类,但是这个类又不在我本地硬盘上有对应的js文件,cmd打包的时候又要根据这个define的路径去找我的类,结果就没有找到,于是加载 空.js 所以会报错。错误示例代码如下:

    		getModelByViewModel: function(viewModelConfig) {
    		  var me = this;
    		  var modelClass = 'oaSystem.model.auto.' + viewModelConfig.data.modelName;
    		  return Ext.ClassManager.get(modelClass) || Ext.define(modelClass, {
    								extend: 'Ext.data.Model',
    								idProperty: viewModelConfig.data.primaryKey,     // 设置模块model的主键
    								nameFields: viewModelConfig.data.nameField,      // 设置模块model的名称字段
    								identifier: viewModelConfig.data.keygenType,     // 设置模块model的主键生成方式
    								fields: me.getModelFields(viewModelConfig.data.fields), // 设置字段
    								                // 取得主键值
    								getIdValue: function () {
    									return this.get(this.idProperty);
    								},
    
    								// 取得当前记录的名字字段
    								getNameValue: function () {
    									if (this.nameFields)
    										return this.get(this.nameFields);
    									else
    										return null;
    								}
    		  })
    		}, 

    modelClass为动态获取,动态创建这个类,cmd打包之后,根据这个类名去找js文件,结果没有找到。所以报错


    在不打包的情况下,这个方法是可行的...


    解决方法暂时想到使用集合方式,如下:

    	 dataModels: new Ext.util.MixedCollection,//键值对集合,可以集合json数据
    	//1. 通过data中fields配置生成一个DataModel
    	getModelByViewModel: function(viewModelConfig) {
    		console.log('11111 im here come to catche me!');
    	  var me = this;
    	  if (viewModelConfig)
    	  {
    	  }else
    	   viewModelConfig  = this.viewModelConfig;
    	  
    	  var modelClass = 'oaSystem.model.auto.' + viewModelConfig.data.modelName;
    	  //var modelClassAlias = viewModelConfig.data.modelName;
    	  //debugger;
    	  if (this.dataModels.get(modelClass)){
    		  return this.dataModels.get(modelClass)
    	  }else{
             console.log('ccc  im here come to catche me!');
    		 var abc = Ext.widget('modeldatamodel', {
    							idProperty: viewModelConfig.data.primaryKey,     // 设置模块model的主键
    							nameFields: viewModelConfig.data.nameField,      // 设置模块model的名称字段
    							identifier: viewModelConfig.data.keygenType,     // 设置模块model的主键生成方式
    							fields: me.getModelFields(viewModelConfig.data.fields) // 设置字段
    							
    	     });
    		 this.dataModels.add(modelClass,abc);
    		 return abc;
    	  }
    	}, 

    这样cmd再打包就不会出错了,先定义一个oaSystem.model.DataModel这个基类。然后判断是否存在再生成。

  • 相关阅读:
    novell.directory.ldap获取邮箱活动目录
    xamarin.android 资源图片问题
    xamarin.android 消息推送功能--极光推送
    xamarin.IOS App闪退日志----crash
    xamarin android 获取根证书代码
    xamarin.android pullToRefresharp.Android下拉刷新样式、侧滑删除功能
    数字证书链验证
    xamarin DependencyService源码阅读
    xamarin android ListView手动分组
    xamarin android,UWP 网络类型和IP地址
  • 原文地址:https://www.cnblogs.com/muyuge/p/6152478.html
Copyright © 2011-2022 走看看