xxxxxxxxxx本节我们讨论下 如何让布局器与已有系统集成并传递数据
xxxxxxxxxx我们布局器不像其他的一些js组件,new一个实例,本身布局器页面已经比较庞大了,所以足够作为一个独立的页面存在将布局器单独部署:可以是nginx也可以是web系统下的任何地方,只要可以实现以http方式访问到index-xxx.html即可
xxxxxxxxxx您可以采用页面跳转方式,从上一个业务页面跳转到当前布局器,并在url中带参数,当跳转到布局器后,在布局器从url获取参数再进行后端接口交互保存和恢复布局器
xxxxxxxxxx1 自己业务先建立一个页面 拿到页面主键 pageId2 跳转到布局器,地址参数携带此pageId 例如 http://xxx/magicalcoder/index-layui.html?pageId=1233 当index-layui.html加载完毕|会自动调用|assets/drag/js/user/callback.js|进入after_start(api) 布局器加载完后会调用此方法 您可以在此处初始化上一次的数据|自行提供后端接口保存和初始化|如果您点击了保存按钮|则自动进入callback.js的save_html方法
更多技术细节请参考
基于layui布局器与现有系统集成细节
xxxxxxxxxx您也可以使用iframe在当前页面集成此布局器的地址<iframe url="布局器地址"></iframe>.通过iframe来与布局器交互(稍麻烦)主要布局器地址必须以http开头的
xxxxxxxxxx如果您使用layui:var layer = layui.layer;$("#openMagicalDrag").click(function () {layer.open({maxmin:true,type:2,content:"/layui?stageFrom=magical_editor&targetElemId=editorHtml"})})//点击保存按钮的回调MagicalCallback.prototype.save_html = function (html, rootNode) {window.parent.document.getElementById("父页面的某个结构");//获取父界面某个dom结构 剩下的就可以把html暂存进去了}
xxxxxxxxxx页面流程如下:父页面:parent.html<html><head></head><body><!-- 布局器保存完会把html插入此处--><textarea class="layui-textarea" id="editorHtml" placeholder="布局器点击保存后的代码将替换此处"></textarea>< iframe id="dropInnerIframe" style="width:100%;min-height:100%" src="index-xxx.html?targetElemId=editorHtml"></iframe></body></html>布局器入口页: index-xxx.html打开callback.js 追加以下内容 仅供参考//注意新版已经有了getParameter方法MagicalCallback.prototype.getParameter = function(name) {var query = window.location.search.substring(1);if(query!=''){var vars = query.split("&");for (var i=0;i<vars.length;i++) {var pair = vars[i].split("=");if(pair.length=2){if(pair[0] == name){return pair[1];}}}}return null;}//当布局器加载完毕执行MagicalCallback.prototype.after_start = function (api) {//var targetElemId = this.getParameter("targetElemId");if(targetElemId!=''){//获取父页面的目标dom的值var targetElem = window.parent.document.getElementById(targetElemId);if(targetElem){if(targetElem.value != ''){api.insertHtml(targetElem.value)}else {api.insertHtml('')}}else {alert("父页面中无id="+targetElemId+"的元素")}}}//每当布局器有变动就会自动调用此方法MagicalCallback.prototype.after_workspace_change = function () {var targetElemId = this.getParameter("targetElemId");if(targetElemId!=''){//写入父页面的目标dom节点var targetElem = window.parent.document.getElementById(targetElemId);if(targetElem){targetElem.value = html;}else {alert("父页面中无id="+targetElemId+"的元素")}}}