tailor multi fragment && cutom-amd script demo 说明
tailor 官方demo 中提供了一个multi fragment 的demo,这个比较简单,就是使用不同的
后端server 做为fragment ,然后使用 html tag 进行加载就可以了。
multi fragment 说明
- 调用格式
<h2>Fragment 1:</h2>
<fragment src="http://localhost:8081" primary id="custom-id"></fragment>
<h2>Fragment 2:</h2>
<fragment async src="http://localhost:8082"></fragment>
<div>All done!</div>
- 后端服务
就是一个简单的node http server,格式如下:
const fragment1 = http.createServer(
serveFragment('fragment1', 'http://localhost:8081')
);
fragment1.listen(8081);
- fragment 创建说明
fragment2 使用了异步处理,fragment3 使用基础模版同时设置了超时处理
'use strict';
const url = require('url');
const jsHeaders = {
'Content-Type': 'application/javascript',
'Access-Control-Allow-Origin': '*'
};
const defineFn = (module, fragmentName) => {
return `define (['${module}'], function (module) {
return function initFragment (element) {
element.className += ' fragment-${fragmentName}-${module}';
element.innerHTML += ' ' + module;
}
})`;
};
const defineFnPromise = (module, fragmentName) => {
return `define (['${module}'], function (module) {
return function initFragment (element) {
// Lazy rendering on fragment
return new Promise((res, rej) => {
setTimeout(() => {
element.className += ' fragment-${fragmentName}-${module}';
element.innerHTML += ' ' + module;
return res();
}, 200)
})
}
})`;
};
module.exports = (fragmentName, fragmentUrl, modules = 1, delay = false) => (
request,
response
) => {
const pathname = url.parse(request.url).pathname;
switch (pathname) {
case '/module-1.js':
if (delay) {
return setTimeout(() => {
response.writeHead(200, jsHeaders);
response.end(defineFn('js1', fragmentName));
}, 500);
} else {
response.writeHead(200, jsHeaders);
response.end(defineFn('js1', fragmentName));
}
break;
case '/module-2.js':
response.writeHead(200, jsHeaders);
response.end(defineFnPromise('js2', fragmentName));
break;
case '/module-3.js':
response.writeHead(200, jsHeaders);
response.end(defineFn('js3', fragmentName));
break;
case '/fragment.css':
// serve fragment's CSS
response.writeHead(200, { 'Content-Type': 'text/css' });
response.end(`
.fragment-${fragmentName} {
padding: 30px;
margin: 10px;
text-align: center;
}
.fragment-${fragmentName}-js1 {
}
.fragment-${fragmentName}-js2 {
color: blue;
}
.fragment-${fragmentName}-js3 {
text-decoration: underline
}
`);
break;
default:
const moduleLinks = [];
// 默认的处理,为了提供css 以及js 处理,tailor 会使用loadcss 加载css资源
for (var i = 0; i < modules; i++) {
moduleLinks[i] = `<${fragmentUrl}/module-${i +
1}.js>; rel="fragment-script"`;
}
// serve fragment's body
response.writeHead(200, {
Link: `<${fragmentUrl}/fragment.css>; rel="stylesheet",${moduleLinks.join(
','
)}`,
'Content-Type': 'text/html'
});
response.end(`
<div class="fragment-${fragmentName}">
Fragment ${fragmentName}
</div>
`);
}
};
- js fragment 定义说明
就是一个amd 个格式的js,demo 使用了一个 requirejs 兼容的包iamdee 替换amd 加载处理
格式如下:
以下的调用了其他模块,其他模块的定义在模版文件中,js fragment 如下:
const defineFn = (module, fragmentName) => {
return `define (['${module}'], function (module) {
return function initFragment (element) {
element.className += ' fragment-${fragmentName}-${module}';
element.innerHTML += ' ' + module;
}
})`;
};
异步格式
const defineFnPromise = (module, fragmentName) => {
return `define (['${module}'], function (module) {
return function initFragment (element) {
// Lazy rendering on fragment
return new Promise((res, rej) => {
setTimeout(() => {
element.className += ' fragment-${fragmentName}-${module}';
element.innerHTML += ' ' + module;
return res();
}, 200)
})
}
})`;
};
amd 模块定义
base-template.html
define('js1', function () {
return 'js1';
});
define('js2', function () {
return 'js2';
});
模版的使用
demo 使用了基础模版,通过slot 进行占位符处理,demo 主要是处理fragment3
- 模版使用
<body>
+ <slot name="body-start"></slot>
fragment3 模版文件:
+ <title slot="head">Test Page</title>
+ <h2 slot="body-start">Fragment 3</h2>
+ <fragment slot="body-start" src="http://localhost:8083" timeout="1000"></fragment>
- fetchTemplate 处理
在tailor 初始化处理的时候
const tailor = new Tailor({
amdLoaderUrl: AMD_LOADER,
maxAssetLinks: 2,
+ fetchTemplate: fetchTemplateFs(
path.join(__dirname, 'templates'),
baseTemplateFn
)
});
运行效果

说明
multi fragment &&custom amd 这个demo 是一个比较全的使用tailor 的例子,好多方便的功能我们都能看到
参考资料
https://www.npmjs.com/package/iamdee
https://github.com/zalando/tailor
https://github.com/zalando/tailor/tree/master/examples/multiple-fragments-with-custom-amd
tailor multi fragment && cutom-amd script demo 说明的更多相关文章
- linux sheel script demo
demo1 (输入/输出) 1.1. target : 输入姓.名, 输出姓名 1.2. create directory mkdir ~/bin 1.3. create & edit she ...
- MySQL5.7: sql script demo
-- MyISAM Foreign Keys显示不了外键,MyISAM此为5.0 以下版本使用 InnoDB 为5.0以上版本使用 drop table IF EXISTS city; CREATE ...
- SQLite: sql script demo
如果有成熟的架构,如何根据数据库关系的表.视图等,进行代码生成架构?减少写代码的时间? -- 考虑主键外键 -- create database geovindu; use geovindu; --2 ...
- Android android-common 常用功能和工具集合
本文内容 环境 android-common 项目结构 演示 android-common 参考资料 android-common 主要包括如下内容: 缓存,包括图片缓存.预取缓存.网络缓存. 公共 ...
- 使用tailor 轻松方便的集成web 框架react&&vue
tailor 是一款很方便的layout 服务,类似facebook 的bigpipe,我们可以使用此工具 方便的集成各类web 框架,实现micro-fronteds 开发 参考demo https ...
- Android的Fragment的第一种声明方式
Android的Frangment的第一种声明方式 实际效果图如下: 项目结构图如下: fragment1: package com.demo.fragementfirst; import andro ...
- Fragment管理工具类
Fragment相关→FragmentUtils.java→Demo addFragment : 新增fragment removeFragment : 移除fragment replaceFragm ...
- ViewPager+fragment的使用
如图我在一个继承FragmentActivity的类中嵌套了3个fragment分别能实现3个不同的界面,默认展现第一个,在第一个的fragment中有个ViewPager在ViewPager中嵌套了 ...
- AMD包下载及使用
AMD下载 下载地址 选择837.zip下载即可,将837.zib考入相应的文件夹下,并解压缩 wget http://netlib.org/toms/837.zip unzip 837.zip cd ...
随机推荐
- 三:使用docker-machine安装虚拟机上的docker
1.docker安装之后自带docker-machine:(需要win10专业版或mac) 2.如何远程管理一个docker-machine?(以下是Mac环境) 关闭本地的docker应用.运行do ...
- Cracking The Coding Interview 1.2
//原文: // // Write code to reverse a C-Style String. (C-String means that "abcd" is represe ...
- vuesheng生命周期
对着官网的demo写例子,碰到了生命周期钩子方法,之前只是根据官网的图,了解了大概, 现在忍不住想去深扒一下,因此找了几个博客看了下,受益匪浅,故此笔记: 参考:http://www.cnblogs. ...
- 虚拟机中扩展linux系统存储空间
reference: https://blog.csdn.net/greenapple_shan/article/details/52799631 https://blog.csdn.net/lyd1 ...
- 补偿接口中循环一直执行sql的问题
事件: 项目即将上线,测试,观察日志,发现一sql在dal.xml中一直刷日志,但对应在biz日志却是空的 排查步骤: 1.查看对应日志的sql,在项目中找到对应代码所在位置,查看入口与代码逻辑 接口 ...
- idea 一些插件配置
接触maven快2年了吧,对maven还是一知半解其实.得到了一些教训,就是少转牛角尖,多把握实际需要的东西,一口一口吃饭. 插件化很常见了.这里记录idea使用的jetty插件 和tomcat插件和 ...
- set,pair容器使用方法
题目链接:http://codeforces.com/gym/100989/problem/D In this cafeteria, the N tables are all ordered in o ...
- NuGet 程序源包
https://api.nuget.org/v3/index.json (2018-4-24 10:20:07-最新测试,可以用) https://nuget.cnblogs.com/v3/inde ...
- YLZ开发后端外网编写
如何取得前端的值并做处理 // 调用ESB来获取Ajaxpagerespon获得审核记录 @RequestMapping(value = "/queryBydwId", metho ...
- Kaggle(1):数据挖掘的基本流程
我觉得做任何事情,一定要有章法.对于学习类的事情,就是要有框架.第一次打Kaggle比赛,我的一个重要收获就是初步搞清楚了打这类比赛的框架. 可以分为以下六步:理解问题.分析问题.算法选择.结果评价. ...