wex5 python怎么结合

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了wex5 python怎么结合相关的知识,希望对你有一定的参考价值。

参考技术A WeX5的JS是基于AMD规范, 通过requirejs技术实现AMD规范。本文章主要介绍在WeX5中,如何引用JS,具体分为:
如何引用符合AMD规范的JS?
如何引用不符合AMD规范的JS?
如何引用外部的JS?
针对JS引用,平台自带了一个专门的演示案例importJs,目录结构如下:
引用JS
如何引用符合AMD规范的JS文件?
方式一:通过require(‘xx’)引用12

AMD1.js是UI2下符合AMD规范的一个文件,代码如下:
AMD1.js文件内容:
1
2
3
4
5
6
7
define(function(require)
return
fnOfAMD1: function()
alert(“hello AMD1”);

;
);
importJs.js中引用AMD1.js的代码如下:
1
2
3
4
5
6
7
8
define(function(require)
var =require(“jquery”);varjustep=require(“UI/system/lib/justep”);
//加载UI2下, 符合AMD规范的文件
var amd1 = require("./AMD1");
...1234

);
说明:在importJs中,通过var amd1 = require(“./AMD1”)引用了当前目录下的AMD1.js文件,之后,可以通过amd1调用AMD1.js文件返回的方法或变量,例如:amd1.fnOfAMD1() //调用AMD1.js定义的方法;
方式二:通过require([‘x1’, ‘x2’], function(p1, p2))引用12

AMD2.js是UI2下一个符合AMD规范的js文件,内容如下:
1
2
3
4
5
6
7
define(function(require)
return
fnOfAMD2: function()
alert(“hello AMD2”);

;
);
importJs.js中引用AMD2.js的代码如下:
1
2
3
4
5
6
7
Model.prototype.importInnerBtnClick = function(event)
//加载UI2下, 符合AMD规范的文件
var path = “./AMD2”;
require([path], function(m)
m.fnOfAMD2();
);
;
说明:在importJS.js中,通过require([xxx], function(x))方式,引用了AMD2.js文件,在回调函数中,参数m是AMD2.js文件返回的对象,在回调函数中,可以通过m调用AMD2.js中返回的对象上的方法和变量,例如:m.fnOfAMD2();
如何引用不符合AMD规范的JS文件?
对于不符合AMD规范的JS文件,引用方式与符合AMD规范的JS文件类似,唯一的区别是不符合模块化的JS没有返回值,具体引用方式如下:
方式一:通过require(‘xx’)引用12

noneAMD1.js是UI2下一个不符合AMD规范的JS文件,内容如下:
1
2
3
function fnOfNoneAMD1()
alert(“hello noneAMD1”);

importJs.js中引用noneAMD1.js的代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
define(function(require)
var =require(“jquery”);varjustep=require(“UI/system/lib/justep”);
//加载UI2下, 符合AMD规范的文件
var amd1 = require("./AMD1");

//加载外网, 符合AMD规范的文件
var outterAMD1 = require("080/x5/UI2/demo/misc/importJs/outterAMD1.js");

//加载UI2下, 不符合AMD规范的文件
require("./noneAMD1");
...12345678910

);
说明:如上12行代码所示,通过require(“./noneAMD1”)引用了不符合AMD规范的noneAMD1.js文件,在importJs.js的后续代码中,可以直接访问noneAMD1.js中定义的全局函数或变量,例如:fnOfNoneAMD1();
方式二:通过require([‘x1’, ‘x2’], function())引用12

noneAMD2.js是UI2下一个不符合AMD规范的JS文件,内容如下:
1
2
3
function fnOfNoneAMD2()
alert(“hello noneAMD2”);

importJs.js中引用noneAMD2.js的代码如下:
1
2
3
4
5
6
7
Model.prototype.importInnerNoneAMDBtnClick = function(event)
//加载UI2下, 不符合AMD规范的文件
var path = “./noneAMD2”;
require([path], function()
fnOfNoneAMD2();
);
;
说明:在require([xx], function())的回调函数中,可以直接使用被引用的noneAMD2.js中定义的全局函数和变量,例如:fnOfNoneAMD2();
如何引用外部的JS文件?
对于外部的JS文件,引用方式和UI2下的JS文件类似(无论是符合AMD规范还是不符合AMD规范),唯一的区别是给定的JS文件路径必须是”http://”开头的绝对路径,且必须是完整的路径(如果有扩展名,必须带扩展名,如”.js”)。
例如:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
define(function(require)

//加载外网, 符合AMD规范的文件
var outterAMD1 = require(“h04/outterAMD1.js“);

//加载外网, 不符合AMD规范的文件
require(“h/wp-content/uploads/2015/04/outterNoneAMD1.js“);

Model.prototype.importOutterBtnClick = function(event)
//加载外网, 符合AMD规范的文件
var path = “wex5.com/wp-content/uploads/2015/04/outterAMD2.js“;
require([path], function(m)
m.fnOfOutterAMD2();
)
;

Model.prototype.importOutterNoneAMDBtnClick = function(event)
//加载外网, 不符合AMD规范的文件
var path = “om/wp-content/uploads/2015/04/outterNoneAMD2.js“;
require([path], function()
fnOfOutterNoneAMD2();
)
;

);
总结
在WeX5中,引用JS(无论是符合AMD规范,还是不符合AMD规范)主要有两种方式:require(‘path’)和require([xx, xx], function(p1,p2)),这两种方式对比如下:
引用JS方式 被引用JS的加载顺序 限制
require(‘xx’) 预先加载被引用的JS,再加载当前JS; require参数必须是字符串常量;
require([xx, xx],function(p1,p2)) 先加载当前JS,执行到require语句时,才加载被引用的JS; require参数支持变量或表达式;
对于这两种require方式,path必须符合以下规则:
如果引用UI2下的文件,支持两种路径:以”./”或”../”开头的相对路径(相对于当前js所在的文件);以”UI/”开头的路径(UI表示UI2);路径不需要带文件扩展名”.js”;
如果引用外部文件,路径必须是以”http://”开头的完整路径(如果有扩展名”.js”,必须带上扩展名);
WeX5是单页模式,通过require引用的JS文件,每个不同的JS文件只加载一次,如果使用不符合AMD规范的JS文件,需要注意全局JS变量只有一份(多个页共享相同的全局变量)。
注意事项
通过require加载js文件时,如果被加载的js文件中有document.write时,会报错,例如,执行以下代码时:
1
require([“haidu.com/api?type=quick&ak=您的密钥&v=1.4”],function());
会出现以下错误:
Failed to execute ‘write’ on ‘Document’: xxx It isn’t possible to write into a document from an asynchronously-loaded external script unless it is explicitly opened.
原因是”aidu.com/api?type=quick&ak=您的密钥&v=1.4″返回的代码类似:
1
2
3
4
5
(function()
window.BMap_loadScriptTime = (new Date).getTime();
document.write(‘');
‘);
)();
解决方法可参考异步加载百度地图,例如:
1
2
3
4
5
6
7
8
9
10
11
Model.prototype.baiduBtnClick = function(event)
if (!window._baiduInitialize)
window._baiduInitialize = function()
var mp = new BMap.Map(“map”);
mp.centerAndZoom(new BMap.Point(121.491, 31.233), 11);
;
require(["hi.map.baidu.com/api?v=1.4&ak=您的密钥&callback=_baiduInitialize"], function());
123

;

wex5 初级项目实战入门 01 框架与思路

 一.前言     

        使用wex5一段时间了,感觉wex5自带的baas后端不伦不类,本身用前端的思想去处理后端的技术问题,本身就是不切合实际的一种想法。能不能结合其它后端来提升wex5的整体开发水平和速度呢?

       经过对比,选择了thinkphp5+layui2.0+vue.js+wex5的解决方案。

       本人是初级学习者,将学习和练习过程记录,希望加深理解,并帮助更多有理想的人,答疑解惑。随后基于四大框架来制作学习视频网站,博客图文跟进介绍,便于同步学习。

       先看一下管理后台基本效果。

      1.加入动态星星背景的登陆页

       

   2  深黑色的管理后台

       

  3 数据增删改查

   

 

   

   今天开篇不说技术节点,重点从项目设计和开发角度,重点说开发总体思路。

二  部署

     对于初学者而言,项目部署个人推荐宝塔面板.linux 和window版本都有。无论是本机调试,还是服务器部署,简单,自带了环境搭建,一键建站等众多工具。具体使用可参见官网或者我的博客。

     

    

   注意:1. 一键部署thinkphp5框架时,linux版自带伪静态,window 版没有,需要手动添加伪静态.

                    

      2 .管理后台和前端,后端,其实是三个应用,需要三个项目。本机测试和远程部署,后端路径可能会在页面中反复使用。一量更改,需要大量修改。可以写一个js来统一调用。 

         

        这样在页面中只要引入这段js,baseUrl就得到后端域名。

    3 . window本机调试域名设置:

        C:\\Windows\\System32\\drivers\\etc\\hosts      文件添加本机域名

        

     顺便说一下,一些广告也可以在这里干掉

     

三  框架选择与对比

     一口气学4个框架,听起来吓人,其实简单。从基础流程和逻辑作起,跑通了,其它就是复制和粘贴了。特别是模块化设计思想成熟以后,代码和页面复用性提高。框架的作用就是为了高效。

    1. thinkphp5.0

        国产的好东西,不多说了,学习成本低,响应快,代码好看,配置简单,基于mvc模型操作,不能再简单了。关键是报错给的精确到标点。之前用baas的现在要出坑。java的一堆神报错,本人难于接受。

      来几张图看看:

      

      数据库配置,填完基本参数,就能拿到数据,不用考虑并发,连接池什么的。

       

      在控制器里写了几行代码,根据id取出用户模型数据,转换成json返回。够简单吧。

      

    调用淘宝接口,根据访问ip得到访问者的地理信息,查询到城市,很多人想做这件事,简单位。

 2 . layui 

      后台管理界面用layui,无论是效率还是美观,值得使用。

      关键是文档写的太好。你要什么,直接从官网托下来就能用。改的地方也给你写好了例子。无语的api.

      layui重点维护表格组件table和弹层组件layer,实在是有先见之明。

     

     table的使用,从官网拷下来,改改字段就能用。

     

     layer功能太强大,弹信息,弹页面都可以。关键是快。

3 .vue.js

    一说vue.js,大家都怕了。我也怕。但是我看看了文档几行。不用不行。

   比如下面这个页面:

   

   信息查询页面,用过wex5自然想到绑定,多简单。那要是没有绑定呢??

   老老实实一个一个取出元素赋值!!!!!

   用了vue.js以后,创建一个vue实例,绑到外层div上,内层元素就可以直接绑定显示了。

    

 

  数据变了,内容就响应的变。

vue我只用到了v-model.已经可以用了。其它可以用到了再学。 

   layui和vue在一些地方会有冲突:

           1。layui  的layui-admin样式内的元素不能绑定vue实例

           2.  layui 的form表单中,radio,checkbox 等样式不能正确绑定vue实例,可使用原生form组件

           3.  div嵌套中绑定会出现数据冲突。只能单一层级绑定。  

4 wex5  3.6

      掉进很多次wex5的坑,没有一种框架是完美的。虽然响应不是很快,那要是拋弃了baas呢???

      看来wex5还是一个不错的快速开发前端框架。至于大家吐槽的app问题,不行就整原生吧---如果你有能力的话。

      目前稳定版本是3.6.不知官方是否还在重点维护。

 

 四  总结

      1  4个框架,配合使用。

      2   配套教学视频同步制作,欢迎指出,批评。本人小白,言多勿怪。

      

 

以上是关于wex5 python怎么结合的主要内容,如果未能解决你的问题,请参考以下文章

Python万年历怎么把表头和数字部分结合

微网站 wex5开发微网站怎么用

结合工程实践选题调研分析同类软件产品

python如何编译py文件生成pycpyopyd以及如何和C语言结合使用

wex5编写的应用可以在安卓5.0环境中运行吗?

利用WeX5集成百度地图 wex5是啥 wex5官网 wex5论