TypeScript Error TS2304: Cannot find name ‘require’的解决方法

最近在研究ionic framework,在编译项目的时候出现一个报错:

TS2304: Cannot find name 'require'

原因是我们使用了ECharts,在引用它的使用写了这样的一句代码:

// 引入 ECharts 主模块
var echarts = require('echarts/lib/echarts');

require是在ES5的语法里常用的方式,现在我们写typescript了,没有这个玩意儿怎么办?
我找了很久,在github上找到了一个项目:
https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/requirejs/require.d.ts
把项目里的require.d.ts放到ionic的app目录下就解决了这个报错。

TypeScript Error TS2304: Cannot find name ‘Set’、’Promise’、’Map’.解决方法

最近在研究ionic framework,希望使用hybrid app开发我们团队的新版app报表模块。

在使用命令:

ionic serve

启动应用的时候,发现www/build目录下没有app.bundle.js这个文件,这个文件是typescript编译之后生成的一个js文件。看了命令行启动日志,发现有大量的typescript编译报错,以下就展示部分典型报错信息:

TypeScript error: /Users/wangzhiang/IdeaProjects/crm-ionic/node_modules/@angular/common/src/directives/ng_class.d.ts(81,35): Error TS2304: Cannot find name 'Set'.
TypeScript error: /Users/wangzhiang/IdeaProjects/crm-ionic/node_modules/@angular/common/src/facade/async.d.ts(34,33): Error TS2304: Cannot find name 'Promise'.
TypeScript error: /Users/wangzhiang/IdeaProjects/crm-ionic/node_modules/@angular/common/src/facade/lang.d.ts(11,17): Error TS2304: Cannot find name 'Map'.

经过stackoverflow和github的指点,我找到的解决方法如下:
先安装angular2依赖,–save-dev目的是把angular2依赖写入到package.json里:

npm install angular2 --save-dev

然后在项目的app目录下找到app.ts文件,在文件顶部加上:

///<reference path="../node_modules/angular2/typings/browser.d.ts"/>

这样之后就解决了typescript报错的问题。

HTML分页打印实现

最近在开发的过程中遇到的一个一次性打印多张单据的需求,我们的单据的长度是不确定的,如果直接打印页面的话一个单据有可能会被“腰斩”打印在两张纸上。这个需求让我联想起了以前写论文的时候,在Word里面添加分页符,这样不管上面一章的内容的长度怎么变化,下面一章的内容永远都是顶到页眉的。Word的本质实际上是所见即所得的网页,它的底层就是HTML代码,所以HTML也应该有方法可以实现类似的功能。
以下是实现的方法,也非常简单:
// 循环体开始
<div class="print-main" style="page-break-after:always;">
页面内容
</div>
// 循环体结束

ECSHOP中transport.js和jquery冲突的解决方法

在html文件的最后面添加下面的代码即可:

<script type="text/javascript" src="jquery-1.7.2.min.js"></script>
<script type="text/javascript">
$(function() {
window.__Object_toJSONString = Object.prototype.toJSONString;
delete Object.prototype.toJSONString;
});
</script>

代码在文件中的顺序:

先导入transport.js文件

{insert_scripts files="../js/transport.js,../js/region.js"}

然后导入jquery文件

<script type="text/javascript" src="jquery-1.7.2.min.js"></script>

再加上这段代码

<script type="text/javascript">
$(function() {
window.__Object_toJSONString = Object.prototype.toJSONString;
delete Object.prototype.toJSONString;
});
</script>

最后引入自己用jquery书写的js文件:

<script type="text/javascript" src="main.js"></script>

Sea.js出现Uncaught TypeError: object is not a function的解决方法

最近我有一个项目需要用到seajs+jquery+underscore来开发前端页面,是第一次使用seajs做项目。一开始使用就遇到了:Uncaught TypeError: object is not a function的问题,这个问题到谷歌上搜索之后是一大片的,github上玉伯也有给出耐心的解答。后来我发现遇到这个问题就是两个原因:
1、引用的第三方类库的路径不对。
2、没有将第三方非CMD规范的类库定义成CMD的模块

假设我们现在jQuery无法引入,首先我们要检查第一点路径是否正确,打开浏览器的控制台,在控制台输入

seajs.resolve('jquery’)

参数中的jQuery是你在配置中alias里面写的别名,敲回车之后你会发现控制台会输出jQuery的路径,你需要访问一下这条路径,假设这条路径有jQuery的代码,说明你的路径正确,否者你得修改你的路径,理论上路径是相对于sea.js的。

如果你的路径正确,那么你需要将第三方非CMD规范的类库定义成CMD的模块:
jQuery的定义方法:

define(function() {//def CMD
    /*jquery 自身的代码*/
    return $.noConflict();
});//end CMD

jQuery插件的定义方法:

define(function() { //def CMD
    return function($) {
        /*jQuery插件的自身代码*/
    }
});//end CMD 

// 调用的时候使用require要将jquery的传入
var $ = require('jquery');
require('jquery.XXX.js')($);

underscore.js的定义方法:

define(function() {//def CMD
    /*underscore自己的代码*/
    return _.noConflict();
});//end CMD 

对于自己的代码:

define(function() {//def CMD
    /*自身的代码*/
    return XXX;
});//end CMD