@ -74,14 +74,18 @@
var _content2 = _interopRequireDefault ( _content ) ;
var _sidebar = _ _webpack _require _ _ ( 2 6 ) ;
var _sidebar = _ _webpack _require _ _ ( 2 9 ) ;
var _sidebar2 = _interopRequireDefault ( _sidebar ) ;
var _head = _ _webpack _require _ _ ( 28 ) ;
var _head = _ _webpack _require _ _ ( 31 ) ;
var _head2 = _interopRequireDefault ( _head ) ;
var _config = _ _webpack _require _ _ ( 10 ) ;
var _config2 = _interopRequireDefault ( _config ) ;
function _interopRequireDefault ( obj ) { return obj && obj . _ _esModule ? obj : { default : obj } ; }
function _classCallCheck ( instance , Constructor ) { if ( ! ( instance instanceof Constructor ) ) { throw new TypeError ( "Cannot call a class as a function" ) ; } }
@ -147,18 +151,17 @@
// so textContent
var html = Prism . highlight ( codes [ i ] . textContent , Prism . languages . javascript ) ;
codes [ i ] . innerHTML = html ;
codes [ i ] . classList . add ( 'language-js' ) ;
}
//1,5-6,8
var mapping = { 3 : '6' , 6 : '5' , 9 : '3,9,34' , 19 : '22' , 22 : '6-12' } ;
var pres = document . querySelectorAll ( "pre" ) ;
for ( var key in mapping ) {
pres [ key ] . setAttribute ( "data-line" , mapping [ key ] ) ;
var highlight = _config2 . default . highlight ;
for ( var key in _config2 . default . highlight ) {
pres [ key ] . setAttribute ( "data-line" , highlight [ key ] ) ;
}
this . _$$ ( 'pre' ) . forEach ( function ( item ) {
item . classList . add ( 'language-js' ) ;
} ) ;
@ -1037,13 +1040,13 @@
this . renderTo = typeof data === "string" ? document . querySelector ( data ) : data ;
this . _hidden = this . renderTo . querySelector ( '.omi_scoped__hidden_data' ) ;
this . id = this . _hidden . dataset . omiId ;
this . data = JSON . parse ( this . _hidden . value ) ;
this . data = this . _data = JSON . parse ( this . _hidden . value ) ;
} else {
this . data = data || { } ;
this . data = this . _data = data || { } ;
this . _omi _server _rendering = server ;
this . id = _omi2 . default . getInstanceId ( ) ;
this . refs = { } ;
this . id = this . _omi _server _rendering ? 1000000 + _omi2 . default . getInstanceId ( ) : _omi2 . default . getInstanceId ( ) ;
}
this . refs = { } ;
this . children = [ ] ;
this . childrenData = [ ] ;
this . HTML = null ;
@ -1351,7 +1354,7 @@
key : '_mergeData' ,
value : function _mergeData ( childStr , isFirst ) {
var arr = childStr . match ( /\s*data=['|"](\S*)['|"]/ ) ;
this . data = Object . assign ( { } , this . _getDataset ( childStr ) , arr ? this . parent [ RegExp . $1 ] : null , this . data) ;
this . data = Object . assign ( { } , this . _getDataset ( childStr ) , arr ? this . parent [ RegExp . $1 ] : null , this . _ data) ;
isFirst && this . install ( ) ;
}
} , {
@ -1754,7 +1757,7 @@
/* 9 */
/***/ function ( module , exports , _ _webpack _require _ _ ) {
"use strict" ;
'use strict' ;
Object . defineProperty ( exports , "__esModule" , {
value : true
@ -1766,6 +1769,10 @@
var _index2 = _interopRequireDefault ( _index ) ;
var _config = _ _webpack _require _ _ ( 10 ) ;
var _config2 = _interopRequireDefault ( _config ) ;
function _interopRequireDefault ( obj ) { return obj && obj . _ _esModule ? obj : { default : obj } ; }
function _classCallCheck ( instance , Constructor ) { if ( ! ( instance instanceof Constructor ) ) { throw new TypeError ( "Cannot call a class as a function" ) ; } }
@ -1775,7 +1782,7 @@
function _inherits ( subClass , superClass ) { if ( typeof superClass !== "function" && superClass !== null ) { throw new TypeError ( "Super expression must either be null or a function, not " + typeof superClass ) ; } subClass . prototype = Object . create ( superClass && superClass . prototype , { constructor : { value : subClass , enumerable : false , writable : true , configurable : true } } ) ; if ( superClass ) Object . setPrototypeOf ? Object . setPrototypeOf ( subClass , superClass ) : subClass . _ _proto _ _ = superClass ; }
function getMarkDown ( name , lan ) {
var md = _ _webpack _require _ _ ( 1 0 ) ( "./" + lan + "_" + name + ".md" ) ;
var md = _ _webpack _require _ _ ( 1 1 ) ( "./" + lan + "_" + name + ".md" ) ;
return md . substring ( 0 , md . length - 1 ) . replace ( /\\r\\n/g , "\r\n" ) . replace ( /\\n/g , "\n" ) . replace ( /\\t/g , "\t" ) . replace ( 'module.exports = "' , "" ) . replace ( /\\"/g , '"' ) . replace ( /\\\\/g , '\\' ) ;
}
@ -1798,19 +1805,19 @@
}
_createClass ( Content , [ {
key : "install" ,
key : 'install' ,
value : function install ( ) {
this . data . html = marked ( getMarkDownByArr ( [ 'installation' , 'hello_world' , 'components' , 'communication' , 'lifecycle' , 'events' , 'condition' , 'loop' , 'form' , 'inherit' , 'template' , 'thinking_in_omi' ] , 'cn' ) ) ;
this . data . html = marked ( getMarkDownByArr ( _config2 . default . mds , 'cn' ) ) ;
}
} , {
key : "style" ,
key : 'style' ,
value : function style ( ) {
return " \n .content{\n width: 80%;\n }\n h2{\n padding-top:20px;\n }\n h3{\n color:#444444;\n }\n pre{\n border: 1px solid #eee;\n width: 100%;\n }\n li{\n text-indent: 20px;\n list-style:disc inside ;\n }\n " ;
return ' \n .content{\n width: 80%;\n }\n h2{\n padding-top:20px;\n }\n h3{\n color:#444444;\n }\n pre{\n border: 1px solid #eee;\n width: 100%;\n }\n li{\n text-indent: 20px;\n list-style:disc inside ;\n }\n ' ;
}
} , {
key : "render" ,
key : 'render' ,
value : function render ( ) {
return "\n <div class=\"content\">\n {{{html}}}\n </div>\n " ;
return '\n <div class="content">\n {{{html}}}\n </div>\n ' ;
}
} ] ) ;
@ -1821,24 +1828,50 @@
/***/ } ,
/* 10 */
/***/ function ( module , exports ) {
'use strict' ;
Object . defineProperty ( exports , "__esModule" , {
value : true
} ) ;
var config = {
//1,5-6,8
highlight : { 3 : '6' , 6 : '5' , 9 : '3,9,34' , 19 : '22' , 22 : '6-12' , 33 : '13,18' } ,
mds : [ 'installation' , 'hello_world' , 'components' , 'communication' , 'lifecycle' , 'events' , 'condition' , 'loop' , 'form' , 'inherit' , 'template' , 'get_dom' , 'thinking_in_omi' ] ,
cn _menus : [ { title : "快速开始" , list : [ { "name" : "安装" } , { "name" : "Hello World" } , { "name" : "组件" } , { "name" : "组件通讯" } , { "name" : "生命周期" } , { "name" : "事件处理" } , { "name" : "条件判断" } , { "name" : "循环遍历" } , { "name" : "表单" } , { "name" : "继承" } ,
//{"name": "容器系统"},
{ "name" : "模板切换" } , { "name" : "获取DOM节点" } ,
//{"name": "服务器端渲染"},
{ "name" : "Omi的理念" } ] } , { title : "Omi原理" , list : [ { "name" : "未完待续" } , { "name" : "..." } , { "name" : "..." } , { "name" : "..." } ] } ] ,
en _menu : [ { title : "QUICK START" , list : [ { "name" : "Installation" } , { "name" : "Hello World" } , { "name" : "Components" } , { "name" : "Lifecycle" } , { "name" : "Handling Events" } , { "name" : "Conditional Rendering" } , { "name" : "Lists and Keys" } , { "name" : "Forms" } , { "name" : "Inheritance" } , { "name" : "Sever-side Rendering" } , { "name" : "Thinking In Omi" } ] } , { title : "Principle of Omi" , list : [ { "name" : "Scoped CSS" } ] } ]
} ;
exports . default = config ;
/***/ } ,
/* 11 */
/***/ function ( module , exports , _ _webpack _require _ _ ) {
var map = {
"./README.md" : 11 ,
"./cn_communication.md" : 12 ,
"./cn_components.md" : 13 ,
"./cn_condition.md" : 14 ,
"./cn_events.md" : 15 ,
"./cn_form.md" : 16 ,
"./cn_hello_world.md" : 17 ,
"./cn_inherit.md" : 18 ,
"./cn_installation.md" : 19 ,
"./cn_lifecycle.md" : 20 ,
"./cn_loop.md" : 21 ,
"./cn_template.md" : 22 ,
"./cn_thinking_in_omi.md" : 23 ,
"./en_hello_world.md" : 24 ,
"./en_installation.md" : 25
"./README.md" : 12 ,
"./cn_communication.md" : 13 ,
"./cn_components.md" : 14 ,
"./cn_condition.md" : 15 ,
"./cn_events.md" : 16 ,
"./cn_form.md" : 17 ,
"./cn_get_dom.md" : 18 ,
"./cn_hello_world.md" : 19 ,
"./cn_inherit.md" : 20 ,
"./cn_installation.md" : 21 ,
"./cn_lifecycle.md" : 22 ,
"./cn_loop.md" : 23 ,
"./cn_pr_env.md" : 24 ,
"./cn_template.md" : 25 ,
"./cn_thinking_in_omi.md" : 26 ,
"./en_hello_world.md" : 27 ,
"./en_installation.md" : 28
} ;
function webpackContext ( req ) {
return _ _webpack _require _ _ ( webpackContextResolve ( req ) ) ;
@ -1851,101 +1884,113 @@
} ;
webpackContext . resolve = webpackContextResolve ;
module . exports = webpackContext ;
webpackContext . id = 1 0 ;
webpackContext . id = 1 1 ;
/***/ } ,
/* 11 */
/***/ function ( module , exports ) {
module . exports = "module.exports = \"# Omi使用文档\\r\\n* [安装](./cn_installation.md)\\r\\n* [Hello World](./cn_hello_world.md)\\r\\n* [组件](./cn_components.md)\\r\\n* [组件通讯](./cn_communication.md)\\r\\n* [生命周期](./cn_lifecycle.md)\\r\\n* [事件处理](./cn_events.md)\\r\\n* [条件判断](./cn_condition.md)\\r\\n* [循环遍历](./cn_loop.md)\\r\\n* [表单](./cn_form.md)\\r\\n* [继承](./cn_inhrit.md)\\r\\n* [模板切换](./cn_template.md)\\r\\n* [Omi理念](./cn_thinking_in_omi.md)\\r\\n\\r\\n# 从零一步步打造Web组件化框架Omi\\r\\n\\r\\n( 待续...) \\r\\n\\r\\n* 局部CSS揭秘\\r\\n* 组件嵌套揭秘\\r\\n* 事件处理揭秘\\r\\n* 服务器端渲染揭秘\\r\\n* 模板切换揭秘\\r\\n* 容器系统揭秘\""
/***/ } ,
/* 12 */
/***/ function ( module , exports ) {
module . exports = "module.exports = \" <h2 id=\\\"组件通讯\\\">组件通讯</h2>\\r\\n\\r\\n使用Omi, 其实没有组件通讯的概念, 因为: \\r\\n\\r\\n* 通过在子节点上声明 data-* 或者声明 data 传递给子节点 \\r\\n* 父容器设置childrenData自动传递给子节点\\r\\n* 完全面向对象,可以非常容易地拿到对象的实例,之后可以设置实例属性和调用实例的方法\\r\\n\\r\\n所以通讯变得畅通无阻, 下面一一来举例说明。\\r\\n\\r\\n### data-*或者data通讯 \\r\\n\\r\\n```js\\r\\nclass Hello extends Omi.Component {\\r\\n constructor(data) {\\r\\n super(data);\\r\\n }\\r\\n style () {\\r\\n return `\\r\\n h1{\\r\\n \\tcursor:pointer;\\r\\n }\\r\\n `;\\r\\n }\\r\\n handleClick(target, evt){\\r\\n alert(target.innerHTML);\\r\\n }\\r\\n render() {\\r\\n return `\\r\\n <div>\\r\\n \\t<h1 onclick=\\\"handleClick(this, event)\\\">Hello ,{{name}}!</h1>\\r\\n </div>\\r\\n \\t\\t`;\\r\\n\\r\\n }\\r\\n}\\r\\n\\r\\nOmi.makeHTML('Hello', Hello);\\r\\n\\r\\nclass App extends Omi.Component {\\r\\n constructor(data) {\\r\\n super(data);\\r\\n }\\r\\n \\r\\n render() {\\r\\n return `\\r\\n <div>\\r\\n <Hello data-name=\\\"Omi\\\" />\\r\\n </div>\\r\\n `;\\r\\n }\\r\\n}\\r\\n\\r\\nOmi.render(new App(),\\\"#container\\\");\\r\\n```\\r\\n\\r\\n如上面代码所示, 通过 data-name=\\\"Omi\\\"可以把name传递给子组件。下面的代码也可以达到同样的效果。\\r\\n\\r\\n```js\\r\\n...\\r\\nclass App extends Omi.Component {\\r\\n constructor(data) {\\r\\n super(data);\\r\\n this.helloData = { name : 'Omi' };\\r\\n }\\r\\n \\r\\n render() {\\r\\n return `\\r\\n <div>\\r\\n <Hello data=\\\"helloData\\\" />\\r\\n </div>\\r\\n `;\\r\\n }\\r\\n}\\r\\n\\r\\nOmi.render(new App(),\\\"#container\\\");\\r\\n```\\r\\n\\r\\n还可以使用childrenData的方式。\\r\\n\\r\\n```js\\r\\n...\\r\\nclass App extends Omi.Component {\\r\\n constructor(data) {\\r\\n super(data);\\r\\n this.childrenData = [{ name : 'Omi' }];\\r\\n }\\r\\n \\r\\n render() {\\r\\n return `\\r\\n <div>\\r\\n <Hello />\\r\\n </div>\\r\\n `;\\r\\n }\\r\\n}\\r\\n\\r\\nOmi.render(new App(),\\\"#container\\\");\\r\\n```\\r\\n\\r\\n### 设置对象实例\\r\\n\\r\\n```js\\r\\n...\\r\\nclass App extends Omi.Component {\\r\\n constructor(data) {\\r\\n super(data);\\r\\n }\\r\\n \\r\\n installed(){\\r\\n this.hello.data.name = \\\"Omi\\\";\\r\\n this.update()\\r\\n }\\r\\n \\r\\n render() {\\r\\n return `\\r\\n <div>\\r\\n <Hello name=\\\"hello\\\" />\\r\\n </div>\\r\\n `;\\r\\n }\\r\\n}\\r\\n\\r\\nOmi.render(new App(),\\\"#container\\\");\\r\\n```\\r\\n\\r\\n也可以通过设置omi-id在程序任何地方拿到该对象的实例。如: \\r\\n\\r\\n```js\\r\\n...\\r\\nclass App extends Omi.Component {\\r\\n constructor(data) {\\r\\n super(data);\\r\\n }\\r\\n \\r\\n installed(){\\r\\n Omi.get(\\\"hello\\\").data.name = \\\"Omi\\\";\\r\\n this.update()\\r\\n }\\r\\n \\r\\n render() {\\r\\n return `\\r\\n <div>\\r\\n <Hello omi-id=\\\"hello\\\" />\\r\\n </div>\\r\\n `;\\r\\n\\r\\n }\\r\\n}\\r\\n\\r\\nOmi.render(new App(),\\\"#container\\\");\\r\\n``` \""
module . exports = "module.exports = \"# Omi使用文档\\r\\n* [安装](./cn_installation.md)\\r\\n* [Hello World](./cn_hello_world.md)\\r\\n* [组件](./cn_components.md)\\r\\n* [组件通讯](./cn_communication.md)\\r\\n* [生命周期](./cn_lifecycle.md)\\r\\n* [事件处理](./cn_events.md)\\r\\n* [条件判断](./cn_condition.md)\\r\\n* [循环遍历](./cn_loop.md)\\r\\n* [表单](./cn_form.md)\\r\\n* [继承](./cn_inhrit.md)\\r\\n* [模板切换](./cn_template.md)\\r\\n* [Omi理念](./cn_thinking_in_omi.md)\\r\\n\\r\\n# 从零一步步打造Web组件化框架Omi\\r\\n\\r\\n( 待续...) \\r\\n\\r\\n* 局部CSS揭秘\\r\\n* 组件嵌套揭秘\\r\\n* 事件处理揭秘\\r\\n* 服务器端渲染揭秘\\r\\n* 模板切换揭秘\\r\\n* 容器系统揭秘\""
/***/ } ,
/* 13 */
/***/ function ( module , exports ) {
module . exports = "module.exports = \"<h2 id=\\\"组件 \\\">组件</h2>\\r\\n\\r\\n我们希望开发者可以像搭积木一样制作Web程序, 所以一切皆组件。\\r\\n\\r\\n### 简单组件\\r\\n\\r\\n这里我们使用Todo的例子来讲解Omi组件体系的使用。\\r\\n\\r\\n```js\\r\\nclass Todo extends Omi.Component {\\r\\n constructor(data) {\\r\\n super(data);\\r\\n }\\r\\n add (evt) {\\r\\n evt.preventDefault();\\r\\n this.data.items.push(this.data.text);\\r\\n this.data.text = '';\\r\\n this.update();\\r\\n }\\r\\n\\r\\n style () {\\r\\n return `\\r\\n h3 { color:red; }\\r\\n button{ color:green;}\\r\\n `;\\r\\n }\\r\\n\\r\\n handleChange(target){\\r\\n this.data.text = target.value;\\r\\n }\\r\\n\\r\\n render () {\\r\\n return `<div>\\r\\n <h3>TODO</h3>\\r\\n <ul> {{#items}} <li>{{.}}</li> {{/items}}</ul>\\r\\n <form onsubmit=\\\"add(event)\\\" >\\r\\n <input type=\\\"text\\\" onchange=\\\"handleChange(this)\\\" value=\\\"{{text}}\\\" />\\r\\n <button>Add #{{items.length}}</button>\\r\\n </form>\\r\\n </div>`;\\r\\n }\\r\\n}\\r\\n\\r\\nOmi.render(new Todo({ items: [] ,text : '' }),\\\"body\\\");\\r\\n```\\r\\n\\r\\n组件生成的HTML最终会插入到body中。上面的例子展示了Omi的部分特性:\\r\\n\\r\\n- data传递: new Todo(data,..)的data可以直接提供给render方法里的模板\\r\\n- 局部CSS: h3只对render里的h3生效, 不会污染外面的h3; button也是同样的\\r\\n- 声明式事件绑定: onchange调用的就是组件内的handleChange, this可以拿到当然的DOM元素,还可以拿到当前的event\\r\\n- 需要手动调用update方法才能更新组件\\r\\n\\r\\n这里需要特别强调的是, 为了更加的自由和灵活度。Omi没有内置数据变更的自动更新, 需要开发者自己调用update方法。\\r\\n你也可以和[oba](https://github.com/kmdjs/oba)或者mobx一起使用来实现自动更新。\\r\\n\\r\\n[[点击这里->在线试试]](http://alloyteam.github.io/omi/website/redirect.html?type=todo)\\r\\n\\r\\n### 组件嵌套\\r\\n\\r\\n几乎所有的Web网页或者Web应用, 我们需要嵌套我们定义的组件来完成所有的功能和展示。比如上面的Todo, 我们也是可以抽取出List。\\r\\n这样有什么好处? 易维护、可扩展、方便复用。如, 我们抽取去List: \\r\\n\\r\\n```js\\r\\nclass List extends Omi.Component {\\r\\n constructor(data) {\\r\\n super(data);\\r\\n }\\r\\n\\r\\n render () {\\r\\n return `<ul> {{#items}} <li>{{.}}</li> {{/items}}</ul>`;\\r\\n }\\r\\n}\\r\\n```\\r\\n\\r\\n怎么使用这个List? \\r\\n\\r\\n```js\\r\\nimport List from './list.js';\\r\\n\\r\\nOmi.makeHTML('List', List);\\r\\n\\r\\nclass Todo extends Omi.Component {\\r\\n constructor(data) {\\r\\n super(data);\\r\\n this.data.length = this.data.items.length;\\r\\n this.childrenData = [ { items : this.data.items } ];\\r\\n }\\r\\n\\r\\n add (evt) {\\r\\n evt.preventDefault();\\r\\n this.list.data.items.push(this.data.text);\\r\\n this.data.length = this.list.data.items.length;\\r\\n this.data.text = '';\\r\\n this.update();\\r\\n }\\r\\n\\r\\n style () {\\r\\n return `\\r\\n h3 { color:red; }\\r\\n button{ color:green;}\\r\\n `;\\r\\n }\\r\\n\\r\\n handleChange(target){\\r\\n this.data.text = target.value;\\r\\n }\\r\\n\\r\\n render () {\\r\\n return `<div>\\r\\n <h3>TODO</h3>\\r\\n <List omi-id=\\\"list\\\" name=\\\"list\\\" />\\r\\n <form onsubmit=\\\"add(event)\\\" >\\r\\n <input type=\\\"text\\\" onchange=\\\"handleChange(this)\\\" value=\\\"{{text}}\\\" />\\r\\n <button>Add #{{length}}</button>\\r\\n </form>\\r\\n </div>`;\\r\\n }\\r\\n}\\r\\n```\\r\\n\\r\\n* 第3行, 通过makeHTML方法把组件制作成可以在render中使用的标签。当然Omi.makeHTML('List', List);也可以写在List组件的代码下面。\\r\\n* 第9行, 通过设置this.childrenData可以把参数传递给子组件。this.childrenData是个数组, 这样就支持多child的情况。\\r\\n* 第36行, 在render方法中使用List组件。其中name方法可以让你在代码里通过this快速方法到该组件的实例。omi-id可以让你通过Omi.mapping['list']快速访问到组件对象的实例。\\r\\n\\r\\n[[点击这里->在线试试]](http://alloyteam.github.io/omi/website/redirect.html?type=todo_nest) \""
module . exports = "module.exports = \"<h2 id=\\\"组件 通讯\\\">组件通讯</h2>\\r\\n\\r\\n使用Omi, 其实没有组件通讯的概念, 因为: \\r\\n\\r\\n* 通过在子节点上声明 data-* 或者声明 data 传递给子节点 \\r\\n* 父容器设置childrenData自动传递给子节点\\r\\n* 完全面向对象,可以非常容易地拿到对象的实例,之后可以设置实例属性和调用实例的方法\\r\\n\\r\\n所以通讯变得畅通无阻, 下面一一来举例说明。\\r\\n\\r\\n### data-*或者data通讯 \\r\\n\\r\\n```js\\r\\nclass Hello extends Omi.Component {\\r\\n constructor(data) {\\r\\n super(data);\\r\\n }\\r\\n style () {\\r\\n return `\\r\\n h1{\\r\\n \\tcursor:pointer;\\r\\n }\\r\\n `;\\r\\n }\\r\\n handleClick(target, evt){\\r\\n alert(target.innerHTML);\\r\\n }\\r\\n render() {\\r\\n return `\\r\\n <div>\\r\\n \\t<h1 onclick=\\\"handleClick(this, event)\\\">Hello ,{{name}}!</h1>\\r\\n </div>\\r\\n \\t\\t`;\\r\\n\\r\\n }\\r\\n}\\r\\n\\r\\nOmi.makeHTML('Hello', Hello);\\r\\n\\r\\nclass App extends Omi.Component {\\r\\n constructor(data) {\\r\\n super(data);\\r\\n }\\r\\n \\r\\n render() {\\r\\n return `\\r\\n <div>\\r\\n <Hello data-name=\\\"Omi\\\" />\\r\\n </div>\\r\\n `;\\r\\n }\\r\\n}\\r\\n\\r\\nOmi.render(new App(),\\\"#container\\\");\\r\\n```\\r\\n\\r\\n如上面代码所示, 通过 data-name=\\\"Omi\\\"可以把name传递给子组件。下面的代码也可以达到同样的效果。\\r\\n\\r\\n```js\\r\\n...\\r\\nclass App extends Omi.Component {\\r\\n constructor(data) {\\r\\n super(data);\\r\\n this.helloData = { name : 'Omi' };\\r\\n }\\r\\n \\r\\n render() {\\r\\n return `\\r\\n <div>\\r\\n <Hello data=\\\"helloData\\\" />\\r\\n </div>\\r\\n `;\\r\\n }\\r\\n}\\r\\n\\r\\nOmi.render(new App(),\\\"#container\\\");\\r\\n```\\r\\n\\r\\n还可以使用childrenData的方式。\\r\\n\\r\\n```js\\r\\n...\\r\\nclass App extends Omi.Component {\\r\\n constructor(data) {\\r\\n super(data);\\r\\n this.childrenData = [{ name : 'Omi' }];\\r\\n }\\r\\n \\r\\n render() {\\r\\n return `\\r\\n <div>\\r\\n <Hello />\\r\\n </div>\\r\\n `;\\r\\n }\\r\\n}\\r\\n\\r\\nOmi.render(new App(),\\\"#container\\\");\\r\\n```\\r\\n\\r\\n### 设置对象实例\\r\\n\\r\\n```js\\r\\n...\\r\\nclass App extends Omi.Component {\\r\\n constructor(data) {\\r\\n super(data);\\r\\n }\\r\\n \\r\\n installed(){\\r\\n this.hello.data.name = \\\"Omi\\\";\\r\\n this.update()\\r\\n }\\r\\n \\r\\n render() {\\r\\n return `\\r\\n <div>\\r\\n <Hello name=\\\"hello\\\" />\\r\\n </div>\\r\\n `;\\r\\n }\\r\\n}\\r\\n\\r\\nOmi.render(new App(),\\\"#container\\\");\\r\\n```\\r\\n\\r\\n也可以通过设置omi-id在程序任何地方拿到该对象的实例。如: \\r\\n\\r\\n```js\\r\\n...\\r\\nclass App extends Omi.Component {\\r\\n constructor(data) {\\r\\n super(data);\\r\\n }\\r\\n \\r\\n installed(){\\r\\n Omi.get(\\\"hello\\\").data.name = \\\"Omi\\\";\\r\\n this.update()\\r\\n }\\r\\n \\r\\n render() {\\r\\n return `\\r\\n <div>\\r\\n <Hello omi-id=\\\"hello\\\" />\\r\\n </div>\\r\\n `;\\r\\n\\r\\n }\\r\\n}\\r\\n\\r\\nOmi.render(new App(),\\\"#container\\\");\\r\\n``` \""
/***/ } ,
/* 14 */
/***/ function ( module , exports ) {
module . exports = "module.exports = \"<h2 id=\\\" 条件判断\\\">条件判断</h2>\\r\\n\\r\\n我们经常需要根据不同的状态呈现不同的界面, 比如有的用户是vip要显示vip的Logo。Omi有许多种方式满足你的要求。\\r\\n\\r\\n### 方式一\\r\\n\\r\\n```js\\r\\nclass ConditionTest extends Omi.Component {\\r\\n constructor(data) {\\r\\n super(data);\\r\\n }\\r\\n\\r\\n render () {\\r\\n return `{{#isVip}}\\r\\n <div>you are VIP.</div>\\r\\n {{/isVip}}\\r\\n {{^isVip}}\\r\\n <div>you are not VIP.</div>\\r\\n {{/isVip}}`;\\r\\n }\\r\\n}\\r\\n```\\r\\n\\r\\n上面完全使用mustachejs的条件判断的语法。当然Omi不强制你使用mustachejs。你可以是omi.lite.js, 然后重写Omi.template方法去使用任意你喜爱的模板引擎。\\r\\n\\r\\n### 方式二\\r\\n\\r\\n```js\\r\\nclass ConditionTe st extends Omi.Component {\\r\\n constructor(data) {\\r\\n super(data);\\r\\n }\\r\\n\\r\\n render () {\\r\\n if(this.data.isVip){\\r\\n return '<div>you are VIP.</div>';\\r\\n }else{\\r\\n return '<div>you are not VIP.</div>';\\r\\n }\\r\\n }\\r\\n}\\r\\n```\\r\\n\\r\\nrender就是提供了很好的可编程性, 里面可以写任意js逻辑代码。对了, 差点忘了, style方法里面也可以写js逻辑的。\\r\\n\\r\\n```js\\r\\nclass ConditionTest extends Omi.Component {\\r\\n constructor(data) {\\r\\n super(data);\\r\\n }\\r\\n\\r\\n style (){\\r\\n if(this.data.isVip){\\r\\n return 'div{ color : red; }';\\r\\n }else{\\r\\n return 'div{ color : green; }';\\r\\n }\\r\\n }\\r\\n\\r\\n render () {\\r\\n if(this.data.isVip){\\r\\n return '<div>you are VIP.</div>';\\r\\n }else{\\r\\n return '<div>you are not VIP.</div>';\\r\\n }\\r\\n }\\r\\n}\\r\\n``` \""
module . exports = "module.exports = \"<h2 id=\\\" 组件\\\">组件</h2>\\r\\n\\r\\n我们希望开发者可以像搭积木一样制作Web程序, 所以一切皆组件。\\r\\n\\r\\n### 简单组件\\r\\n\\r\\n这里我们使用Todo的例子来讲解Omi组件体系的使用。\\r\\n\\r\\n```js\\r\\nclass Todo extends Omi.Component {\\r\\n constructor(data) {\\r\\n super(data);\\r\\n }\\r\\n add (evt) {\\r\\n evt.preventDefault();\\r\\n this.data.items.push(this.data.text);\\r\\n this.data.text = '';\\r\\n this.update();\\r\\n }\\r\\n\\r\\n style () {\\r\\n return `\\r\\n h3 { color:red; }\\r\\n button{ color:green;}\\r\\n `;\\r\\n }\\r\\n\\r\\n handleChange(target){\\r\\n this.data.text = target.value;\\r\\n }\\r\\n\\r\\n render () {\\r\\n return `<div>\\r\\n <h3>TODO</h3>\\r\\n <ul> {{#items}} <li>{{.}}</li> {{/items}}</ul>\\r\\n <form onsubmit=\\\"add(event)\\\" >\\r\\n <input type=\\\"text\\\" onchange=\\\"handleChange(this)\\\" value=\\\"{{text}}\\\" />\\r\\n <button>Add #{{items.length}}</button>\\r\\n </form>\\r\\n </div>`;\\r\\n }\\r\\n}\\r\\n\\r\\nOmi.render(new Todo({ items: [] ,text : '' }),\\\"body\\\");\\r\\n```\\r\\n\\r\\n组件生成的HTML最终会插入到body中。上面的例子展示了Omi的部分特性:\\r\\n\\r\\n- data传递: new Todo(data,..)的data可以直接提供给render方法里的模板\\r\\n- 局部CSS: h3只对render里的h3生效, 不会污染外面的h3; button也是同样的\\r\\n- 声明式事件绑定: onchange调用的就是组件内的handleChange, this可以拿到当然的DOM元素,还可以拿到当前的event\\r\\n- 需要手动调用update方法才能更新组件\\r\\n\\r\\n这里需要特别强调的是, 为了更加的自由和灵活度。Omi没有内置数据变更的自动更新, 需要开发者自己调用update方法。\\r\\n你也可以和[oba](https://github.com/kmdjs/oba)或者mobx一起使用来实现自动更新。\\r\\n\\r\\n[[点击这里->在线试试]](http://alloyteam.github.io/omi/website/redirect.html?type=todo)\\r\\n\\r\\n### 组件嵌套\\r\\n\\r\\n几乎所有的Web网页或者Web应用, 我们需要嵌套我们定义的组件来完成所有的功能和展示。比如上面的Todo, 我们也是可以抽取出List。\\r\\n这样有什么好处? 易维护、可扩展、方便复用。如, 我们抽取去List: \\r\\n\\r\\n```js\\r\\nclass Li st extends Omi.Component {\\r\\n constructor(data) {\\r\\n super(data);\\r\\n }\\r\\n\\r\\n render () {\\r\\n return `<ul> {{#items}} <li>{{.}}</li> {{/items}}</ul>`;\\r\\n }\\r\\n}\\r\\n```\\r\\n\\r\\n怎么使用这个List? \\r\\n\\r\\n```js\\r\\nimport List from './list.js';\\r\\n\\r\\nOmi.makeHTML('List', List);\\r\\n\\r\\nclass Todo extends Omi.Component {\\r\\n constructor(data) {\\r\\n super(data);\\r\\n this.data.length = this.data.items.length;\\r\\n this.childrenData = [ { items : this.data.items } ];\\r\\n }\\r\\n\\r\\n add (evt) {\\r\\n evt.preventDefault();\\r\\n this.list.data.items.push(this.data.text);\\r\\n this.data.length = this.list.data.items.length;\\r\\n this.data.text = '';\\r\\n this.update();\\r\\n }\\r\\n\\r\\n style () {\\r\\n return `\\r\\n h3 { color:red; }\\r\\n button{ color:green;}\\r\\n `;\\r\\n }\\r\\n\\r\\n handleChange(target){\\r\\n this.data.text = target.value;\\r\\n }\\r\\n\\r\\n render () {\\r\\n return `<div>\\r\\n <h3>TODO</h3>\\r\\n <List omi-id=\\\"list\\\" name=\\\"list\\\" />\\r\\n <form onsubmit=\\\"add(event)\\\" >\\r\\n <input type=\\\"text\\\" onchange=\\\"handleChange(this)\\\" value=\\\"{{text}}\\\" />\\r\\n <button>Add #{{length}}</button>\\r\\n </form>\\r\\n </div>`;\\r\\n }\\r\\n}\\r\\n```\\r\\n\\r\\n* 第3行, 通过makeHTML方法把组件制作成可以在render中使用的标签。当然Omi.makeHTML('List', List);也可以写在List组件的代码下面。\\r\\n* 第9行, 通过设置this.childrenData可以把参数传递给子组件。this.childrenData是个数组, 这样就支持多child的情况。\\r\\n* 第36行, 在render方法中使用List组件。其中name方法可以让你在代码里通过this快速方法到该组件的实例。omi-id可以让你通过Omi.mapping['list']快速访问到组件对象的实例。\\r\\n\\r\\n[[点击这里->在线试试]](http://alloyteam.github.io/omi/website/redirect.html?type=todo_nest) \""
/***/ } ,
/* 15 */
/***/ function ( module , exports ) {
module . exports = "module.exports = \"<h2 id=\\\" 事件处理\\\">事件处理</h2>\\r\\n\\r\\nOmi的事件分内置事件和自定义事件。在内置事件处理方面巧妙地利用了浏览器自身的管线机制, 可以通过event和this轻松拿到事件实例和触发该事件的元素。\\r\\n\\r\\n### 内置事件\\r\\n\\r\\n什么算内置事件? 只要下面正则能匹配到就算内置事件。\\r\\n\\r\\n```js\\r\\non(abort|blur|cancel|canplay|canplaythrough|change|click|close|contextmenu|cuechange|dblclick|drag|dragend|dragenter|dragleave|dragover|dragstart|drop|durationchange|emptied|ended|error|focus|input|invalid|keydown|keypress|keyup|load|loadeddata|loadedmetadata|loadstart|mousedown|mouseenter|mouseleave|mousemove|mouseout|mouseover|mouseup|mousewheel|pause|play|playing|progress|ratechange|reset|resize|scroll|seeked|seeking|select|show|stalled|submit|suspend|timeupdate|toggle|volumechange|waiting|autocomplete|autocompleteerror|beforecopy|beforecut|beforepaste|copy|cut|paste|search|selectstart|wheel|webkitfullscreenchange|webkitfullscreenerror|touchstart|touchmove|touchend|touchcancel|pointerdown|pointerup|pointercancel|pointermove|pointerover|pointerout|pointerenter|pointerleave)\\r\\n```\\r\\n\\r\\n内置事件怎么绑定? 如下所示: \\r\\n\\r\\n```js\\r\\nclass Event Test extends Omi.Component {\\r\\n constructor(data) {\\r\\n super(data);\\r\\n }\\r\\n\\r\\n handleClick(dom, evt){\\r\\n alert(dom.innerHTML);\\r\\n }\\r\\n\\r\\n render () {\\r\\n return `<div onclick=\\\"handleClick(this, event)\\\">Hello, Omi!</div>`;\\r\\n }\\r\\n}\\r\\n```\\r\\n\\r\\n### 自定义事件\\r\\n\\r\\n开发者自己定义的组件的事件, 称为自定义事件。这里拿分页作为例子: \\r\\n\\r\\n```js\\r\\nimport Omi from '../../src/index.js';\\r\\nimport Pagination from './pagination.js';\\r\\nimport Content from './content.js';\\r\\n\\r\\nOmi.makeHTML('Pagination', Pagination);\\r\\nOmi.makeHTML('Content', Content);\\r\\n\\r\\nclass Main extends Omi.Component {\\r\\n constructor(data) {\\r\\n super(data);\\r\\n }\\r\\n\\r\\n installed(){\\r\\n this.content.goto(this.pagination.data.currentPage+1);\\r\\n }\\r\\n handlePageChange(index){\\r\\n this.content.goto(index+1);\\r\\n }\\r\\n\\r\\n render () {\\r\\n return `<div>\\r\\n <h1>Pagination Example</h1>\\r\\n <Content name=\\\"content\\\" />\\r\\n <Pagination\\r\\n name=\\\"pagination\\\"\\r\\n data-total=\\\"100\\\"\\r\\n data-page-size=\\\"10\\\"\\r\\n data-num-edge=\\\"1\\\"\\r\\n data-num-display=\\\"4\\\" \\r\\n onPageChange=\\\"handlePageChange\\\" />\\r\\n </div>`;\\r\\n }\\r\\n}\\r\\n\\r\\nOmi.render( new Main(),'body');\\r\\n```\\r\\n\\r\\n如上面的onPageChange就是自定义事件, 触发会执行handlePageChange。onPageChange方法是在Pagination中执行: \\r\\n\\r\\n```js\\r\\nimport Omi from '../../src/index.js';\\r\\n\\r\\nclass Pagination extends Omi.Component {\\r\\n ...\\r\\n ...\\r\\n ...\\r\\n linkTo: \\\"#\\\",\\r\\n prevText: \\\"Prev\\\",\\r\\n nextText: \\\"Next\\\",\\r\\n ellipseText: \\\"...\\\",\\r\\n prevShow: true,\\r\\n nextShow: true,\\r\\n onPageChange: function () { return false; }\\r\\n }, this.data);\\r\\n\\r\\n this.pageNum = Math.ceil(this.data.total / this.data.pageSize);\\r\\n }\\r\\n goto (index,evt) {\\r\\n evt.preventDefault();\\r\\n this.data.currentPage=index;\\r\\n this.update();\\r\\n this.data.onPageChange(index);\\r\\n }\\r\\n ...\\r\\n ...\\r\\n ...\\r\\n}\\r\\n```\\r\\n\\r\\n这里取了Pagination组件的部分代码。高亮的就是执行onPageChange的地方。\\r\\n\\r\\n### 相关地址\\r\\n\\r\\n* [演示地址](http://alloyteam.github.io/omi/example/pagination/)\\r\\n* [源码地址](https://github.com/AlloyTeam/omi/tree/master/example/pagination) \""
module . exports = "module.exports = \"<h2 id=\\\" 条件判断\\\">条件判断</h2>\\r\\n\\r\\n我们经常需要根据不同的状态呈现不同的界面, 比如有的用户是vip要显示vip的Logo。Omi有许多种方式满足你的要求。\\r\\n\\r\\n### 方式一\\r\\n\\r\\n```js\\r\\nclass Condition Test extends Omi.Component {\\r\\n constructor(data) {\\r\\n super(data);\\r\\n }\\r\\n\\r\\n render () {\\r\\n return `{{#isVip}}\\r\\n <div>you are VIP.</div>\\r\\n {{/isVip}}\\r\\n {{^isVip}}\\r\\n <div>you are not VIP.</div>\\r\\n {{/isVip}}`;\\r\\n }\\r\\n}\\r\\n```\\r\\n\\r\\n上面完全使用mustachejs的条件判断的语法。当然Omi不强制你使用mustachejs。你可以是omi.lite.js, 然后重写Omi.template方法去使用任意你喜爱的模板引擎。\\r\\n\\r\\n### 方式二\\r\\n\\r\\n```js\\r\\nclass ConditionTest extends Omi.Component {\\r\\n constructor(data) {\\r\\n super(data);\\r\\n }\\r\\n\\r\\n render () {\\r\\n if(this.data.isVip){\\r\\n return '<div>you are VIP.</div>';\\r\\n }else{\\r\\n return '<div>you are not VIP.</div>';\\r\\n }\\r\\n }\\r\\n}\\r\\n```\\r\\n\\r\\nrender就是提供了很好的可编程性, 里面可以写任意js逻辑代码。对了, 差点忘了, style方法里面也可以写js逻辑的。\\r\\n\\r\\n```js\\r\\nclass ConditionTest extends Omi.Component {\\r\\n constructor(data) {\\r\\n super(data);\\r\\n }\\r\\n\\r\\n style (){\\r\\n if(this.data.isVip){\\r\\n return 'div{ color : red; }';\\r\\n }else{\\r\\n return 'div{ color : green; }';\\r\\n }\\r\\n }\\r\\n\\r\\n render () {\\r\\n if(this.data.isVip){\\r\\n return '<div>you are VIP.</div>';\\r\\n }else{\\r\\n return '<div>you are not VIP.</div>';\\r\\n }\\r\\n }\\r\\n}\\r\\n``` \""
/***/ } ,
/* 16 */
/***/ function ( module , exports ) {
module . exports = "module.exports = \"<h2 id=\\\" 表单\\\">表单</h2>\\r\\n\\r\\nOmi让一些表单操控起来更加方便, 特别是select! \\r\\n\\r\\n### select标签\\r\\n\\r\\n以前, 我们需要像如下的方式选中一个选项: \\r\\n\\r\\n```html\\r\\n<select>\\r\\n <option value=\\\"grapefruit\\\">Grapefruit</option>\\r\\n <option value=\\\"lime\\\">Lime</option>\\r\\n <option selected value=\\\"coconut\\\">Coconut</option>\\r\\n <option value=\\\"mango\\\">Mango</option>\\r\\n</select>\\r\\n```\\r\\n\\r\\n第三个option由于加上了selected, 所有会被选中。这样带来的问题就是, 开发者写的程序可能要操遍历每个option。而使用Omi, 你只需要这样子: \\r\\n\\r\\n```html\\r\\n<select value=\\\"coconut\\\">\\r\\n <option value=\\\"grapefruit\\\">Grapefruit</option>\\r\\n <option value=\\\"lime\\\">Lime</option>\\r\\n <option value=\\\"coconut\\\">Coconut</option>\\r\\n <option value=\\\"mango\\\">Mango</option>\\r\\n</select>\\r\\n```\\r\\n\\r\\n这样就能达到同样的效果。比如你想选择第一项: \\r\\n\\r\\n```html\\r\\n<select value=\\\"grapefruit\\\">\\r\\n <option value=\\\"grapefruit\\\">Grapefruit</option>\\r\\n <option value=\\\"lime\\\">Lime</option>\\r\\n <option value=\\\"coconut\\\">Coconut</option>\\r\\n <option value=\\\"mango\\\">Mango</option>\\r\\n</select>\\r\\n```\\r\\n\\r\\n是不是非常方便? \\r\\n\\r\\n### 举个例子\\r\\n\\r\\n```js\\r\\nclass FormTest extends Omi.Component {\\r\\n constructor(data) {\\r\\n super(data);\\r\\n \\r\\n }\\r\\n\\r\\n handleChange(target){\\r\\n console.log(target.value)\\r\\n this.data.value = target.value;\\r\\n }\\r\\n\\r\\n handleSubmit(evt) {\\r\\n alert('Your favorite flavor is: ' + this.data.value);\\r\\n evt.preventDefault();\\r\\n }\\r\\n \\r\\n render () {\\r\\n return `\\r\\n <form onsubmit=\\\"handleSubmit(event)\\\">\\r\\n <label>\\r\\n Pick your favorite La Croix flavor:\\r\\n <select value=\\\"{{value}}\\\" onchange=\\\"handleChange(this)\\\">\\r\\n <option value=\\\"grapefruit\\\">Grapefruit</option>\\r\\n <option value=\\\"lime\\\">Lime</option>\\r\\n <option value=\\\"coconut\\\">Coconut</option>\\r\\n <option value=\\\"mango\\\">Mango</option>\\r\\n </select>\\r\\n </label>\\r\\n <input type=\\\"submit\\\" value=\\\"Submit\\\" />\\r\\n </form>`;\\r\\n }\\r\\n}\\r\\n\\r\\nOmi.render(new FormTest({ value: 'mango' }),'#container');\\r\\n```\\r\\n\\r\\n[[点击这里->在线试试]](http://alloyteam.github.io/omi/website/redirect.html?type=form )\""
module . exports = "module.exports = \"<h2 id=\\\" 事件处理\\\">事件处理</h2>\\r\\n\\r\\nOmi的事件分内置事件和自定义事件。在内置事件处理方面巧妙地利用了浏览器自身的管线机制, 可以通过event和this轻松拿到事件实例和触发该事件的元素。\\r\\n\\r\\n### 内置事件\\r\\n\\r\\n什么算内置事件? 只要下面正则能匹配到就算内置事件。\\r\\n\\r\\n```js\\r\\non(abort|blur|cancel|canplay|canplaythrough|change|click|close|contextmenu|cuechange|dblclick|drag|dragend|dragenter|dragleave|dragover|dragstart|drop|durationchange|emptied|ended|error|focus|input|invalid|keydown|keypress|keyup|load|loadeddata|loadedmetadata|loadstart|mousedown|mouseenter|mouseleave|mousemove|mouseout|mouseover|mouseup|mousewheel|pause|play|playing|progress|ratechange|reset|resize|scroll|seeked|seeking|select|show|stalled|submit|suspend|timeupdate|toggle|volumechange|waiting|autocomplete|autocompleteerror|beforecopy|beforecut|beforepaste|copy|cut|paste|search|selectstart|wheel|webkitfullscreenchange|webkitfullscreenerror|touchstart|touchmove|touchend|touchcancel|pointerdown|pointerup|pointercancel|pointermove|pointerover|pointerout|pointerenter|pointerleave)\\r\\n```\\r\\n\\r\\n内置事件怎么绑定? 如下所示: \\r\\n\\r\\n```js\\r\\nclass EventTest extends Omi.Component {\\r\\n constructor(data) {\\r\\n super(data);\\r\\n }\\r\\n\\r\\n handleClick(dom, evt){\\r\\n alert(dom.innerHTML);\\r\\n }\\r\\n\\r\\n render () {\\r\\n return `<div onclick=\\\"handleClick(this, event)\\\">Hello, Omi!</div>`;\\r\\n }\\r\\n}\\r\\n```\\r\\n\\r\\n### 自定义事件\\r\\n\\r\\n开发者自己定义的组件的事件, 称为自定义事件。这里拿分页作为例子: \\r\\n\\r\\n```js\\r\\nimport Omi from '../../src/index.js';\\r\\nimport Pagination from './pagination.js';\\r\\nimport Content from './content.js';\\r\\n\\r\\nOmi.makeHTML('Pagination', Pagination);\\r\\nOmi.makeHTML('Content', Content);\\r\\n\\r\\nclass Main extends Omi.Component {\\r\\n constructor(data) {\\r\\n super(data);\\r\\n }\\r\\n\\r\\n installed(){\\r\\n this.content.goto(this.pagination.data.currentPage+1);\\r\\n }\\r\\n handlePageChange(index){\\r\\n this.content.goto(index+1);\\r\\n }\\r\\n\\r\\n render () {\\r\\n return `<div>\\r\\n <h1>Pagination Example</h1>\\r\\n <Content name=\\\"content\\\" />\\r\\n <Pagination\\r\\n name=\\\"pagination\\\"\\r\\n data-total=\\\"100\\\"\\r\\n data-page-size=\\\"10\\\"\\r\\n data-num-edge=\\\"1\\\"\\r\\n data-num-display=\\\"4\\\" \\r\\n onPageChange=\\\"handlePageChange\\\" />\\r\\n </div>`;\\r\\n }\\r\\n}\\r\\n\\r\\nOmi.render( new Main(),'body');\\r\\n```\\r\\n\\r\\n如上面的onPageChange就是自定义事件, 触发会执行handlePageChange。onPageChange方法是在Pagination中执行: \\r\\n\\r\\n```js\\r\\nimport Omi from '../../src/index.js';\\r\\n\\r\\nclass Pagination extends Omi.Component {\\r\\n ...\\r\\n ...\\r\\n ...\\r\\n linkTo: \\\"#\\\",\\r\\n prevText: \\\"Prev\\\",\\r\\n nextText: \\\"Next\\\",\\r\\n ellipseText: \\\"...\\\",\\r\\n prevShow: true,\\r\\n nextShow: true,\\r\\n onPageChange: function () { return false; }\\r\\n }, this.data);\\r\\n\\r\\n this.pageNum = Math.ceil(this.data.total / this.data.pageSize);\\r\\n }\\r\\n goto (index,evt) {\\r\\n evt.preventDefault();\\r\\n this.data.currentPage=index;\\r\\n this.update();\\r\\n this.data.onPageChange(index);\\r\\n }\\r\\n ...\\r\\n ...\\r\\n ...\\r\\n}\\r\\n```\\r\\n\\r\\n这里取了Pagination组件的部分代码。高亮的就是执行onPageChange的地方。\\r\\n\\r\\n### 相关地址\\r\\n\\r\\n* [演示地址](http://alloyteam.github.io/omi/example/pagination/)\\r\\n* [源码地址](https://github.com/AlloyTeam/omi/tree/master/example/pagination )\""
/***/ } ,
/* 17 */
/***/ function ( module , exports ) {
module . exports = "module.exports = \"<h2 id=\\\" Hello World\\\">Hello World</h2>\\r\\n\\r\\n你可以使用ES6+或者ES5的方式编写Omi程序来搭建你的Web程序。\\r\\n\\r\\n### Hello World with ES6+\\r\\n\\r\\n你可以使用 [webpack](https://webpack.github.io/) 打包工具, webpack会把你的模块代码打成一个很小的包, 优化加载时间。使用[babel](http://babeljs.io/), 让你立刻马上使用ES6+来编写你的web程序。你只需要在webpack配置的module设置好[babel-loader](https://github.com/babel/babel-loader)便可。\\r\\n\\r\\n一个Omi的简短的例子如下所示:\\r\\n\\r\\n```js\\r\\nimport Omi from './omi.js';\\r\\n\\r\\nclass Hello extends Omi.Component {\\r\\n constructor(data) {\\r\\n super(data);\\r\\n }\\r\\n style () {\\r\\n return `\\r\\n h1{\\r\\n cursor:pointer;\\r\\n }\\r\\n `;\\r\\n }\\r\\n handleClick(target, evt){\\r\\n alert(target.innerHTML);\\r\\n }\\r\\n render() {\\r\\n return `\\r\\n <div>\\r\\n <h1 onclick=\\\"handleClick(this, event)\\\">Hello ,{{name}}!</h1>\\r\\n </div>\\r\\n `;\\r\\n\\r\\n }\\r\\n}\\r\\n\\r\\nOmi.render(new Hello({ name : \\\"Omi\\\" }),\\\"#container\\\");\\r\\n```\\r\\n\\r\\n组件生成的HTML最终会插入到#container中。上面的例子展示了Omi的部分特性:\\r\\n\\r\\n- data传递: new Hello(data,..)的data可以直接提供给render方法里的模板\\r\\n- 局部CSS: h1只对render里的h1生效, 不会污染外面的h1\\r\\n- 声明式事件绑定: onclick调用的就是组件内的handleClick, this可以拿到当然的DOM元素,还可以拿到当前的event\\r\\n\\r\\n[[点击这里->在线试试]](http://alloyteam.github.io/omi/website/redirect.html?type=hello)\\r\\n\\r\\n你可以使用Omi.makeHTML来生成组件标签用于嵌套。\\r\\n```js\\r\\n Omi.makeHTML('Hello', Hello);\\r\\n```\\r\\n那么你就在其他组件中使用, 如\\r\\n```js\\r\\n ...\\r\\n render() {\\r\\n return `\\r\\n <div>\\r\\n <div>Test</div>\\r\\n <Hello data-name=\\\"Omi\\\" />\\r\\n </div>\\r\\n `;\\r\\n }\\r\\n ...\\r\\n```\\r\\n\\r\\n[[点击这里->在线试试]](http://alloyteam.github.io/omi/website/redirect.html?type=hello_nest)\\r\\n\\r\\n### Hello World with ES5\\r\\n\\r\\n当然Omi没有抛弃ES5的用户。你可以使用ES5的方式编写Omi。如, 在你的HTML中引用omi.js: \\r\\n\\r\\n```html\\r\\n<script src=\\\"omi.js\\\"></script>\\r\\n```\\r\\n\\r\\n然后: \\r\\n\\r\\n```js\\r\\nvar Hello = Omi.create(\\\"Hello\\\", {\\r\\n style: function () {\\r\\n return \\\"h1{ cursor:pointer }\\\";\\r\\n },\\r\\n handleClick: function (dom) {\\r\\n alert(dom.innerHTML);\\r\\n },\\r\\n render: function () {\\r\\n return '<div>\\\\\\r\\n <h1 onclick=\\\"handleClick(this, event)\\\">Hello ,{{name}}!</h1>\\\\\\r\\n </div>';\\r\\n }\\r\\n});\\r\\n\\r\\nOmi.render(new Hello({ name : \\\"Omi\\\" }),\\\"#container\\\");\\r\\n```\\r\\n当然除了在HTML引入脚步, 你还可以使用AMD、CMD或者CommonJS的方式引入Omi, 这里就不再一一列举。\\r\\n\\r\\n需要注意的是, Omi.create的第一个参数Hello是用来生成Tag Name的。你可以在其他地方嵌入你的组件。如: \\r\\n\\r\\n```js\\r\\n ...\\r\\n render:function() {\\r\\n return '<div>\\\\\\r\\n <div>Test</div>\\\\\\r\\n <Hello data-name=\\\"Omi\\\" />\\\\\\r\\n </div>';\\r\\n }\\r\\n ... \\r\\n```\\r\\n\\r\\n[[点击这里->在线试试]](http://alloyteam.github.io/omi/website/redirect.html?type=hello_es5 )\""
module . exports = "module.exports = \"<h2 id=\\\" 表单\\\">表单</h2>\\r\\n\\r\\nOmi让一些表单操控起来更加方便, 特别是select! \\r\\n\\r\\n### select标签\\r\\n\\r\\n以前, 我们需要像如下的方式选中一个选项: \\r\\n\\r\\n```html\\r\\n<select>\\r\\n <option value=\\\"grapefruit\\\">Grapefruit</option>\\r\\n <option value=\\\"lime\\\">Lime</option>\\r\\n <option selected value=\\\"coconut\\\">Coconut</option>\\r\\n <option value=\\\"mango\\\">Mango</option>\\r\\n</select>\\r\\n```\\r\\n\\r\\n第三个option由于加上了selected, 所有会被选中。这样带来的问题就是, 开发者写的程序可能要操遍历每个option。而使用Omi, 你只需要这样子: \\r\\n\\r\\n```html\\r\\n<select value=\\\"coconut\\\">\\r\\n <option value=\\\"grapefruit\\\">Grapefruit</option>\\r\\n <option value=\\\"lime\\\">Lime</option>\\r\\n <option value=\\\"coconut\\\">Coconut</option>\\r\\n <option value=\\\"mango\\\">Mango</option>\\r\\n</select>\\r\\n```\\r\\n\\r\\n这样就能达到同样的效果。比如你想选择第一项: \\r\\n\\r\\n```html\\r\\n<select value=\\\"grapefruit\\\">\\r\\n <option value=\\\"grapefruit\\\">Grapefruit</option>\\r\\n <option value=\\\"lime\\\">Lime</option>\\r\\n <option value=\\\"coconut\\\">Coconut</option>\\r\\n <option value=\\\"mango\\\">Mango</option>\\r\\n</select>\\r\\n```\\r\\n\\r\\n是不是非常方便? \\r\\n\\r\\n### 举个例子\\r\\n\\r\\n```js\\r\\nclass FormTest extends Omi.Component {\\r\\n constructor(data) {\\r\\n super(data);\\r\\n \\r\\n }\\r\\n\\r\\n handleChange(target){\\r\\n console.log(target.value)\\r\\n this.data.value = target.value;\\r\\n }\\r\\n\\r\\n handleSubmit(evt) {\\r\\n alert('Your favorite flavor is: ' + this.data.value);\\r\\n evt.preventDefault();\\r\\n }\\r\\n \\r\\n render () {\\r\\n return `\\r\\n <form onsubmit=\\\"handleSubmit(event)\\\">\\r\\n <label>\\r\\n Pick your favorite La Croix flavor:\\r\\n <select value=\\\"{{value}}\\\" onchange=\\\"handleChange(this)\\\">\\r\\n <option value=\\\"grapefruit\\\">Grapefruit</option>\\r\\n <option value=\\\"lime\\\">Lime</option>\\r\\n <option value=\\\"coconut\\\">Coconut</option>\\r\\n <option value=\\\"mango\\\">Mango</option>\\r\\n </select>\\r\\n </label>\\r\\n <input type=\\\"submit\\\" value=\\\"Submit\\\" />\\r\\n </form>`;\\r\\n }\\r\\n}\\r\\n\\r\\nOmi.render(new FormTest({ value: 'mango' }),'#container'); \\r\\n```\\r\\n\\r\\n[[点击这里->在线试试]](http://alloyteam.github.io/omi/website/redirect.html?type=form )\""
/***/ } ,
/* 18 */
/***/ function ( module , exports ) {
module . exports = "module.exports = \"<h2 id=\\\" 继承\\\">继承</h2>\\r\\n\\r\\n通过继承机制, 可以利用已有的数据类型来定义新的数据类型。所定义的新的数据类型不仅拥有新定义的成员, 而且还同时拥有旧的成员。我们称已存在的用来派生新类的类为基类, 又称为父类。由已存在的类派生出的新类称为派生类, 又称为子类。\\r\\n\\r\\n### 举个例子 \\r\\n\\r\\n```js\\r\\nclass Hello extends Omi.Component {\\r\\n constructor(data) {\\r\\n super(data);\\r\\n }\\r\\n style () {\\r\\n return `\\r\\n div {\\r\\n cursor:pointer;\\r\\n }\\r\\n `;\\r\\n }\\r\\n handleClick(target, evt){\\r\\n alert(target.innerHTML);\\r\\n }\\r\\n render() {\\r\\n return ' <div onclick=\\\"handleClick(this,event)\\\">Hello {{name}}!</div>'\\r\\n }\\r\\n}\\r\\n\\r\\nclass SubHello extends Hello {\\r\\n constructor(data) {\\r\\n super(data);\\r\\n }\\r\\n}\\r\\n\\r\\nOmi.render(new SubHello({ name : 'Omi' }),'#container');\\r\\n```\\r\\n\\r\\n[[点击这里->在线试试]](http://alloyteam.github.io/omi/website/redirect.html?type=inherit)\\r\\n\\r\\n### ES5下的继承\\r\\n\\r\\n```js\\r\\nvar Hello = Omi.create(\\\"Hello\\\",{\\r\\n render:function(){\\r\\n return ' <div>Hello {{name}}!</div>'\\r\\n }\\r\\n})\\r\\n\\r\\nvar SubHello = Omi.create(\\\"SubHello\\\",Hello,{ });\\r\\n\\r\\n\\r\\nOmi.render(new SubHello({ name : 'Omi' }),'#container');\\r\\n``` \\r\\n\\r\\n[[点击这里->在线试试]](http://alloyteam.github.io/omi/website/redirect.html?type=inherit_es5 )\""
module . exports = "module.exports = \"<h2 id=\\\" 获取DOM节点\\\">获取DOM节点</h2>\\r\\n\\r\\n虽然绝大部分情况下, 开发者不需要去查找获取DOM, 但是还是有需要获取DOM的场景, 所以Omi提供了方便获取DOM节点的方式。\\r\\n\\r\\n### ref和refs \\r\\n\\r\\n```js\\r\\nclass Hello extends Omi.Component {\\r\\n constructor(data) {\\r\\n super(data);\\r\\n }\\r\\n style () {\\r\\n return `\\r\\n h1 {\\r\\n cursor:pointer;\\r\\n }\\r\\n `;\\r\\n }\\r\\n handleClick(){\\r\\n alert(this.refs.abc.innerHTML);\\r\\n }\\r\\n render() {\\r\\n return `\\r\\n <div>\\r\\n <h1 ref=\\\"abc\\\" onclick=\\\"handleClick()\\\">Hello ,{{name}}!</h1>\\r\\n </div>\\r\\n `;\\r\\n\\r\\n }\\r\\n}\\r\\n\\r\\nOmi.render(new Hello({ name : \\\"Omi\\\" }),\\\"#container\\\");\\r\\n```\\r\\n\\r\\n可以看到通过在HTML中标记ref为abc, 那么就通过this.refs.abc访问到该DOM节点。 \\r\\n\\r\\n[[点击这里->在线试试]](http://alloyteam.github.io/omi/website/redirect.html?type=ref )\""
/***/ } ,
/* 19 */
/***/ function ( module , exports ) {
module . exports = "module.exports = \"<h2 id=\\\" 安装\\\">安装</h2>\\n\\nOmi是一款用于创建用户界面的组件化框架, 开放并且现代, 故得名: Omi。\\n\\n### 安装 Omi\\n\\n我们推荐使用 [npm](https://www.npmjs.com/) 来管理你的前端依赖.\\n\\n通过npm安装Omi, 你只需要执行下面的命令:\\n\\n``` js\\nnpm install omi\\n``` \""
module . exports = "module.exports = \"<h2 id=\\\" Hello World\\\">Hello World</h2>\\r\\n\\r\\n你可以使用ES6+或者ES5的方式编写Omi程序来搭建你的Web程序。\\r\\n\\r\\n### Hello World with ES6+\\r\\n\\r\\n你可以使用 [webpack](https://webpack.github.io/) 打包工具, webpack会把你的模块代码打成一个很小的包, 优化加载时间。使用[babel](http://babeljs.io/), 让你立刻马上使用ES6+来编写你的web程序。你只需要在webpack配置的module设置好[babel-loader](https://github.com/babel/babel-loader)便可。\\r\\n\\r\\n一个Omi的简短的例子如下所示:\\r\\n\\r\\n```js\\r\\nimport Omi from './omi.js';\\r\\n\\r\\nclass Hello extends Omi.Component {\\r\\n constructor(data) {\\r\\n super(data);\\r\\n }\\r\\n style () {\\r\\n return `\\r\\n h1{\\r\\n cursor:pointer;\\r\\n }\\r\\n `;\\r\\n }\\r\\n handleClick(target, evt){\\r\\n alert(target.innerHTML);\\r\\n }\\r\\n render() {\\r\\n return `\\r\\n <div>\\r\\n <h1 onclick=\\\"handleClick(this, event)\\\">Hello ,{{name}}!</h1>\\r\\n </div>\\r\\n `;\\r\\n\\r\\n }\\r\\n}\\r\\n\\r\\nOmi.render(new Hello({ name : \\\"Omi\\\" }),\\\"#container\\\");\\r\\n```\\r\\n\\r\\n组件生成的HTML最终会插入到#container中。上面的例子展示了Omi的部分特性:\\r\\n\\r\\n- data传递: new Hello(data,..)的data可以直接提供给render方法里的模板\\r\\n- 局部CSS: h1只对render里的h1生效, 不会污染外面的h1\\r\\n- 声明式事件绑定: onclick调用的就是组件内的handleClick, this可以拿到当然的DOM元素,还可以拿到当前的event\\r\\n\\r\\n[[点击这里->在线试试]](http://alloyteam.github.io/omi/website/redirect.html?type=hello)\\r\\n\\r\\n你可以使用Omi.makeHTML来生成组件标签用于嵌套。\\r\\n```js\\r\\n Omi.makeHTML('Hello', Hello);\\r\\n```\\r\\n那么你就在其他组件中使用, 如\\r\\n```js\\r\\n ...\\r\\n render() {\\r\\n return `\\r\\n <div>\\r\\n <div>Test</div>\\r\\n <Hello data-name=\\\"Omi\\\" />\\r\\n </div>\\r\\n `;\\r\\n }\\r\\n ...\\r\\n```\\r\\n\\r\\n[[点击这里->在线试试]](http://alloyteam.github.io/omi/website/redirect.html?type=hello_nest)\\r\\n\\r\\n### Hello World with ES5\\r\\n\\r\\n当然Omi没有抛弃ES5的用户。你可以使用ES5的方式编写Omi。如, 在你的HTML中引用omi.js: \\r\\n\\r\\n```html\\r\\n<script src=\\\"omi.js\\\"></script>\\r\\n```\\r\\n\\r\\n然后: \\r\\n\\r\\n```js\\r\\nvar Hello = Omi.create(\\\"Hello\\\", {\\r\\n style: function () {\\r\\n return \\\"h1{ cursor:pointer }\\\";\\r\\n },\\r\\n handleClick: function (dom) {\\r\\n alert(dom.innerHTML);\\r\\n },\\r\\n render: function () {\\r\\n return '<div>\\\\\\r\\n <h1 onclick=\\\"handleClick(this, event)\\\">Hello ,{{name}}!</h1>\\\\\\r\\n </div>';\\r\\n }\\r\\n});\\r\\n\\r\\nOmi.render(new Hello({ name : \\\"Omi\\\" }),\\\"#container\\\");\\r\\n```\\r\\n当然除了在HTML引入脚步, 你还可以使用AMD、CMD或者CommonJS的方式引入Omi, 这里就不再一一列举。\\r\\n\\r\\n需要注意的是, Omi.create的第一个参数Hello是用来生成Tag Name的。你可以在其他地方嵌入你的组件。如: \\r\\n\\r\\n```js\\r\\n ...\\r\\n render:function() {\\r\\n return '<div>\\\\\\r\\n <div>Test</div>\\\\\\r\\n <Hello data-name=\\\"Omi\\\" />\\\\\\r\\n </div>';\\r\\n }\\r\\n ...\\r\\n```\\r\\n\\r\\n[[点击这里->在线试试]](http://alloyteam.github.io/omi/website/redirect.html?type=hello_es5) \""
/***/ } ,
/* 20 */
/***/ function ( module , exports ) {
module . exports = "module.exports = \"<h2 id=\\\" 生命周期\\\">生命周期</h2>\\r\\n\\r\\n\\r\\n| 名称 | 含义 | 时机 |\\r\\n| :-------------: |:-------------:|: -----:|\\r\\n| constructor | 构造函数 | new的时候 |\\r\\n| install | 初始化安装, 这可以拿到用户传进的data进行处理 | 实例化 |\\r\\n| installed | 安装完成, HTML已经插入页面之后执行。注意: 组件被remove之后再进行restore也会执行 | ** 实例化和存在期 ** |\\r\\n| uninstall | 卸载组件。执行remove方法会触发该事件 | 销毁时 |\\r\\n| beforeUpdate | 更新前 | 存在期 |\\r\\n| afterUpdate | 更新后 | 存在期 |\\r\\n\\r\\n## 示意图\\r\\n\\r\\n![lc](http://images2015.cnblogs.com/blog/105416/201701/105416-20170119153018546-1566368987.png)\\r\\n \\r\\n需要注意的是installed在实例化期也会执行, 上图没有标出。比如组件被移除再进行还原会执行, 再比如新增新的组件也会执行。\\r\\n \\r\\n### 举个例子\\r\\n\\r\\n```js\\r\\nclass Timer extends Omi.Component {\\r\\n constructor(data) {\\r\\n super(data);\\r\\n }\\r\\n\\r\\n install () {\\r\\n this.data = {secondsElapsed: 0};\\r\\n }\\r\\n\\r\\n tick() {\\r\\n this.data.secondsElapsed++;\\r\\n this.update();\\r\\n }\\r\\n\\r\\n installed(){\\r\\n this.interval = setInterval(() => this.tick(), 1000);\\r\\n }\\r\\n\\r\\n uninstall() {\\r\\n clearInterval(this.interval);\\r\\n }\\r\\n\\r\\n\\r\\n style () {\\r\\n return `\\r\\n .num { color:red; }\\r\\n `;\\r\\n }\\r\\n\\r\\n render () {\\r\\n return `<div>Seconds Elapsed:<span class=\\\"num\\\"> {{secondsElapsed}}</span></div>`;\\r\\n }\\r\\n} \\r\\n```\\r\\n\\r\\n[[点击这里->在线试试]](http://alloyteam.github.io/omi/website/redirect.html?type=lifecycle )\""
module . exports = "module.exports = \"<h2 id=\\\" 继承\\\">继承</h2>\\r\\n\\r\\n通过继承机制, 可以利用已有的数据类型来定义新的数据类型。所定义的新的数据类型不仅拥有新定义的成员, 而且还同时拥有旧的成员。我们称已存在的用来派生新类的类为基类, 又称为父类。由已存在的类派生出的新类称为派生类, 又称为子类。\\r\\n\\r\\n### 举个例子\\r\\n\\r\\n```js\\r\\nclass Hello extends Omi.Component {\\r\\n constructor(data) {\\r\\n super(data);\\r\\n }\\r\\n style () {\\r\\n return `\\r\\n div{\\r\\n cursor:pointer;\\r\\n }\\r\\n `;\\r\\n }\\r\\n handleClick(target, evt){\\r\\n alert(target.innerHTML);\\r\\n }\\r\\n render() {\\r\\n return ' <div onclick=\\\"handleClick(this,event)\\\">Hello {{name}}!</div>'\\r\\n }\\r\\n}\\r\\n\\r\\nclass SubHello extends Hello {\\r\\n constructor(data) {\\r\\n super(data);\\r\\n }\\r\\n}\\r\\n\\r\\nOmi.render(new SubHello({ name : 'Omi' }),'#container');\\r\\n```\\r\\n\\r\\n[[点击这里->在线试试]](http://alloyteam.github.io/omi/website/redirect.html?type=inherit)\\r\\n\\r\\n### ES5下的继承\\r\\n\\r\\n```js\\r\\nvar Hello = Omi.create(\\\"Hello\\\",{\\r\\n render:function(){\\r\\n return ' <div>Hello {{name}}!</div>'\\r\\n }\\r\\n})\\r\\n\\r\\nvar SubHello = Omi.create(\\\"SubHello\\\",Hello,{ });\\r\\n\\r\\n\\r\\nOmi.render(new SubHello({ name : 'Omi' }),'#container'); \\r\\n```\\r\\n\\r\\n[[点击这里->在线试试]](http://alloyteam.github.io/omi/website/redirect.html?type=inherit_es5 )\""
/***/ } ,
/* 21 */
/***/ function ( module , exports ) {
module . exports = "module.exports = \"<h2 id=\\\" 循环遍历\\\">循环遍历</h2>\\r\\n\\r\\n下面介绍mustache.js的方式和javascript遍历的方式。\\r\\n\\r\\n### 方式一\\r\\n\\r\\n```js\\r\\nclass List extends Omi.Component {\\r\\n constructor(data) {\\r\\n super(data);\\r\\n }\\r\\n\\r\\n render () {\\r\\n return `<div>\\r\\n <ul> {{#items}} <li id=\\\"{{id}}\\\">{{text}}</li> {{/items}}</ul>\\r\\n </div>`;\\r\\n }\\r\\n}\\r\\n\\r\\nOmi.render(new List({\\r\\n items: [\\r\\n {id: 1, text: 'Omi'},\\r\\n {id: 2, text: 'dntzhang'},\\r\\n {id: 3, text: 'AlloyTeam'}\\r\\n ]\\r\\n}),\\\"body\\\");\\r\\n```\\r\\n\\r\\nmustache.js更详细的循环遍历使用可看[https://github.com/janl/mustache.js#non-empty-lists](https://github.com/janl/mustache.js#non-empty-lists)。 比如还支持:\\r\\n\\r\\n* 如果items的每一项是字符串, 可以直接**{{.}}**的方式来输出每一项\\r\\n* 循环的时候调用定义好的函数\\r\\n\\r\\n[[点击这里->在线试试]](http://alloyteam.github.io/omi/website/redirect.html?type=list)\\r\\n\\r\\n### 方式二\\r\\n\\r\\n```js\\r\\nclass List extends Omi.Component {\\r\\n constructor(data) {\\r\\n super(data);\\r\\n }\\r\\n\\r\\n render() {\\r\\n return `<div>\\r\\n <ul>\\r\\n ` + this.data.items.map(item =>\\r\\n '<li id=\\\"' + item.id + '\\\">' + item.text + '</li>'\\r\\n ).join(\\\"\\\") + `\\r\\n </ul>\\r\\n </div>`;\\r\\n }\\r\\n}\\r\\n\\r\\nOmi.render(new List({\\r\\n items: [\\r\\n {id: 1, text: 'Omi'},\\r\\n {id: 2, text: 'dntzhang'},\\r\\n {id: 3, text: 'AlloyTeam'}\\r\\n ]\\r\\n}),\\\"body\\\");\\r\\n```\\r\\n\\r\\n你将在页面看到如下效果:\\r\\n\\r\\n![pv](http://images2015.cnblogs.com/blog/105416/201701/105416-20170122095724129-2059595233.png)\\r\\n\\r\\n[[点击这里->在线试试]](http://alloyteam.github.io/omi/website/redirect.html?type=list2) \""
module . exports = "module.exports = \"<h2 id=\\\" 安装\\\">安装</h2>\\n\\nOmi是一款用于创建用户界面的组件化框架, 开放并且现代, 故得名: Omi。\\n\\n### 安装 Omi\\n\\n我们推荐使用 [npm](https://www.npmjs.com/) 来管理你的前端依赖.\\n\\n通过npm安装Omi, 你只需要执行下面的命令:\\n\\n``` js\\nnpm install omi\\n``` \""
/***/ } ,
/* 22 */
/***/ function ( module , exports ) {
module . exports = "module.exports = \"<h2 id=\\\" 模板切换\\\">模板切换</h2>\\r\\n\\r\\nOmi有三个版本。其中的omi.js和omi.lite.js属于Web端使用的版本。\\r\\n\\r\\n* omi.js内置了[mustache.js](https://github.com/janl/mustache.js)作为模版引擎\\r\\n* omi.lite.js不包含任何模版引擎\\r\\n\\r\\nOmi不强制开发者使用mustache.js, 你可以根据业务场景使用任意模板引擎或者不使用模板引擎。\\r\\n\\r\\n那么怎么使用别的模板引擎? 下面拿[artTemplate](https://github.com/aui/artTemplate)作为例子。\\r\\n\\r\\n### 使用artTemplate\\r\\n\\r\\n```js\\r\\nOmi.template = function(tpl, data){\\r\\n return artTemplate.compile(tpl)(data);\\r\\n}\\r\\n```\\r\\n重写Omi.template方法, tpl为传入的模板, data为模板所需的数据, 返回值为HTML。\\r\\n重写完毕后就能在render使用artTemplate的语法, 如: \\r\\n\\r\\n```js\\r\\nclass List extends Omi.Component {\\r\\n constructor(data) {\\r\\n super(data);\\r\\n }\\r\\n\\r\\n style () {\\r\\n return `\\r\\n h1 { color:red; }\\r\\n li{ color:green;}\\r\\n `;\\r\\n }\\r\\n\\r\\n render () {\\r\\n return `<h1>{{title}}</h1>\\r\\n <ul>\\r\\n {{each list as value i}}\\r\\n <li>索引 {{i + 1}} : {{value}}</li>\\r\\n {{/each}}\\r\\n </ul>`;\\r\\n }\\r\\n}\\r\\n```\\r\\n\\r\\n### 相关地址\\r\\n\\r\\n* [演示地址](http://alloyteam.github.io/omi/example/artTemplate/)\\r\\n* [源码地址](https://github.com/AlloyTeam/omi/tree/master/example/artTemplat e)\""
module . exports = "module.exports = \"<h2 id=\\\" 生命周期\\\">生命周期</h2>\\r\\n\\r\\n\\r\\n| 名称 | 含义 | 时机 |\\r\\n| :-------------: |:-------------:|: -----:|\\r\\n| constructor | 构造函数 | new的时候 |\\r\\n| install | 初始化安装, 这可以拿到用户传进的data进行处理 | 实例化 |\\r\\n| installed | 安装完成, HTML已经插入页面之后执行。注意: 组件被remove之后再进行restore也会执行 | ** 实例化和存在期 ** |\\r\\n| uninstall | 卸载组件。执行remove方法会触发该事件 | 销毁时 |\\r\\n| beforeUpdate | 更新前 | 存在期 |\\r\\n| afterUpdate | 更新后 | 存在期 |\\r\\n\\r\\n## 示意图\\r\\n\\r\\n![lc](http://images2015.cnblogs.com/blog/105416/201701/105416-20170119153018546-1566368987.png)\\r\\n \\r\\n需要注意的是installed在实例化期也会执行, 上图没有标出。比如组件被移除再进行还原会执行, 再比如新增新的组件也会执行。\\r\\n \\r\\n### 举个例子\\r\\n\\r\\n```js\\r\\nclass Timer extends Omi.Component {\\r\\n constructor(data) {\\r\\n super(data);\\r\\n }\\r\\n\\r\\n install () {\\r\\n this.data = {secondsElapsed: 0};\\r\\n }\\r\\n\\r\\n tick() {\\r\\n this.data.secondsElapsed++;\\r\\n this.update();\\r\\n }\\r\\n\\r\\n installed(){\\r\\n this.interval = setInterval(() => this.tick(), 1000);\\r\\n }\\r\\n\\r\\n uninstall() {\\r\\n clearInterval(this.interval);\\r\\n }\\r\\n\\r\\n\\r\\n style () {\\r\\n return `\\r\\n .num { color:red; }\\r\\n `;\\r\\n }\\r\\n\\r\\n render () {\\r\\n return `<div>Seconds Elapsed:<span class=\\\"num\\\"> {{secondsElapsed}}</span></div>`;\\r\\n }\\r\\n}\\r\\n```\\r\\n\\r\\n[[点击这里->在线试试]](http://alloyteam.github.io/omi/website/redirect.html?type=lifecycl e)\""
/***/ } ,
/* 23 */
/***/ function ( module , exports ) {
module . exports = "module.exports = \"<h2 id=\\\" Omi的理念\\\">Omi的理念</h2>\\r\\n\\r\\nOmi的理念是基于面向对象编程体系, 内建积木系统。\\r\\n 传统的单向数据流或者抛出event的组件通讯方式增加了系统的稳定性, 但是丧失了灵活性。一定程度上也降低了组建的复用。所谓鱼和熊掌不可兼得。\\r\\n 面向对象体系需要多一个逻辑层, 可以自由操作所有组件的instance, instance之间的逻辑关系构建出了整个程序。这样组建间的逻辑, 通信, 复用就全部迎刃而解。组建也更加单一职责, 更松耦合。\\r\\n\\r\\n对比函数式编程、命令式编程与面向对象编程, 可以归纳总结出下面几条: \\r\\n\\r\\n- 命令式编程干脆直接,利用循环条件等控制流程,强调执行过程\\r\\n- 命令式编程对硬件执行友好,运行更容易,却阻碍了复杂程序的设计\\r\\n- 函数式强调输入和输出,并非执行过程\\r\\n- 函数式倡导多个简单执行单元组合成复杂运算程序\\r\\n- 面向对象编程将对象作为程序的基本单元,更具有重用性、灵活性和扩展性\\r\\n\\r\\n Javascript是哪种类型的语言? 现在ES6+已经有了class。那么他是面向对象语言? \\r\\n但是JS可以在任意地方定义函数并且当作把函数当作值来传递。那么他是函数式编程语言? \\r\\n所以, 没有精准的定义, 取决于你的用法和姿势。其次, Web组件化架构层面编程模型和语言层面编程模型是非常自由的关系。意思就是, 你可以用Javascript构建函数式编程框架如React, 也可以基于面向对象体系搭建Omi。\\r\\n\\r\\n### 函数式编程 VS 面向对象编程\\r\\n\\r\\n在UI组件框架层面, 函数式编程的代表有React, Omi属于面向对象编程体系。那么他们各有什么优缺点? 下面做了个对比( 其实也是函数式编程与面向对象编程的对比) : \\r\\n\\r\\n| | React | Omi |\\r\\n| ------------- |:-------------:|:-----:|\\r\\n| 组件通信 | ★★★★☆| ★★★★★ |\\r\\n| 稳定性 | ★★★★★ | ★★★★☆ |\\r\\n| 灵活性 | ★★★★☆| ★★★★★ |\\r\\n| 扩展性 | ★★★★☆ | ★★★★★ |\\r\\n| 测试性 | ★★★★★ | ★★★★☆ |\\r\\n| 文件大小 | ★★★☆☆ | ★★★★★ |\\r\\n| 功能特性 | ★★★☆☆ | ★★★★☆ |\\r\\n| DOM性能 | ★★★★★ | ★★★★☆ |\\r\\n| 动画性能 | ★★★★☆ | ★★★★★ |\\r\\n| 抽象复杂度 | ★★★★☆ | ★★★★★ |\\r\\n| 异步编程 | ★★★★★ | ★★★★☆ |\\r\\n\\r\\n可以看得出, 鱼和熊掌不可兼得。面向对象编程更具有重用性、灵活性和扩展性, 带来的问题就是更加难测试。\\r\\n具体来说, 如函数式编程, 其测试面积是state1 + state2 + ... + stateN; 在面向对象编程中, 其测试面积是state1× event1 + state2× event2 + ... + stateN× eventN。\\r\\n\\r\\n总结来说, 更加推荐使用面向对象的方式去搭建UI组件化框架。\\r\\n\\r\\n<hr/>\\r\\n\\r\\n### 全文结束,感谢阅读。[开始Omi之旅吧!](https://github.com/AlloyTeam/omi)\\r\\n\\r\\n \""
module . exports = "module.exports = \"<h2 id=\\\" 循环遍历\\\">循环遍历</h2>\\r\\n\\r\\n下面介绍mustache.js的方式和javascript遍历的方式。\\r\\n\\r\\n### 方式一\\r\\n\\r\\n```js\\r\\nclass List extends Omi.Component {\\r\\n constructor(data) {\\r\\n super(data);\\r\\n }\\r\\n\\r\\n render () {\\r\\n return `<div>\\r\\n <ul> {{#items}} <li id=\\\"{{id}}\\\">{{text}}</li> {{/items}}</ul>\\r\\n </div>`;\\r\\n }\\r\\n}\\r\\n\\r\\nOmi.render(new List({\\r\\n items: [\\r\\n {id: 1, text: 'Omi'},\\r\\n {id: 2, text: 'dntzhang'},\\r\\n {id: 3, text: 'AlloyTeam'}\\r\\n ]\\r\\n}),\\\"body\\\");\\r\\n```\\r\\n\\r\\nmustache.js更详细的循环遍历使用可看[https://github.com/janl/mustache.js#non-empty-lists](https://github.com/janl/mustache.js#non-empty-lists)。 比如还支持:\\r\\n\\r\\n* 如果items的每一项是字符串, 可以直接**{{.}}**的方式来输出每一项\\r\\n* 循环的时候调用定义好的函数\\r\\n\\r\\n[[点击这里->在线试试]](http://alloyteam.github.io/omi/website/redirect.html?type=list)\\r\\n\\r\\n### 方式二\\r\\n\\r\\n```js\\r\\nclass List extends Omi.Component {\\r\\n constructor(data) {\\r\\n super(data);\\r\\n }\\r\\n\\r\\n render() {\\r\\n return `<div>\\r\\n <ul>\\r\\n ` + this.data.items.map(item =>\\r\\n '<li id=\\\"' + item.id + '\\\">' + item.text + '</li>'\\r\\n ).join(\\\"\\\") + `\\r\\n </ul>\\r\\n </div>`;\\r\\n }\\r\\n}\\r\\n\\r\\nOmi.render(new List({\\r\\n items: [\\r\\n {id: 1, text: 'Omi'},\\r\\n {id: 2, text: 'dntzhang'},\\r\\n {id: 3, text: 'AlloyTeam'}\\r\\n ]\\r\\n}),\\\"body\\\");\\r\\n```\\r\\n\\r\\n你将在页面看到如下效果:\\r\\n\\r\\n![pv](http://images2015.cnblogs.com/blog/105416/201701/105416-20170122095724129-2059595233.png)\\r\\n\\r\\n[[点击这里->在线试试]](http://alloyteam.github.io/omi/website/redirect.html?type=list2) \""
/***/ } ,
/* 24 */
/***/ function ( module , exports ) {
module . exports = "module.exports = \"<h2 id=\\\" Hello World\\\">Hello World</h2>\\r\\n\\r\\n\\r\\n### Hello World with ES20XX \\r\\n\\r\\nWe recommend using a bundler like [webpack](https://webpack.github.io/) or [Browserify](http://browserify.org/) so you can write modular code and bundle it together into small packages to optimize load time.\\r\\n\\r\\nThe small Omi example looks like this:\\r\\n\\r\\n```js\\r\\nimport Omi from './omi.js';\\r\\n\\r\\nclass Hello extends Omi.Component {\\r\\n constructor(data) {\\r\\n super(data);\\r\\n }\\r\\n style () {\\r\\n return `\\r\\n h1{\\r\\n cursor:pointer;\\r\\n }\\r\\n `;\\r\\n }\\r\\n handleClick(target){\\r\\n alert(target.innerHTML);\\r\\n }\\r\\n render() {\\r\\n return `\\r\\n <div>\\r\\n <h1 onclick=\\\"handleClick(this)\\\">Hello ,{{name}}!</h1>\\r\\n </div>\\r\\n `;\\r\\n\\r\\n }\\r\\n}\\r\\n\\r\\nOmi.render(new Hello({ name : \\\"Omi\\\" }),\\\"body\\\");\\r\\n\\r\\n```\\r\\n\\r\\nThis code renders into body element. \\r\\n\\r\\n\\r\\n### Hello World with ES5\\r\\n\\r\\n\\r\\n```html\\r\\n<script src=\\\"omi.js\\\"></script>\\r\\n``` \""
module . exports = "module.exports = \"<h2 id=\\\" 环境搭建\\\">环境搭建</h2>\\r\\n\\r\\n我们使用 Webpack + ES6 的方式去开发Omi框架; 使用karma+jasmine来作为Omi的测试工具。\\r\\n\\r\\n## 开发依赖包\\r\\n\\r\\n在package.json中, 有如下配置:\\r\\n\\r\\n```js\\r\\n \\\"devDependencies\\\": {\\r\\n \\\"babel-core\\\": \\\"^6.0.20\\\",\\r\\n \\\"babel-loader\\\": \\\"^6.0.1\\\",\\r\\n \\\"babel-preset-es2015\\\": \\\"^6.0.15\\\",\\r\\n \\\"node-libs-browser\\\": \\\"^0.5.3\\\",\\r\\n \\\"webpack\\\": \\\"^1.14.0\\\",\\r\\n \\\"jasmine-core\\\": \\\"^2.5.2\\\",\\r\\n \\\"karma\\\": \\\"^1.3.0\\\",\\r\\n \\\"karma-chrome-launcher\\\": \\\"^2.0.0\\\",\\r\\n \\\"karma-jasmine\\\": \\\"^1.1.0\\\",\\r\\n \\\"karma-webpack\\\": \\\"^1.8.1\\\"\\r\\n }\\r\\n```\\r\\n\\r\\n* ES6+相关依赖有babel-core、babel-loader和babel-preset-es2015\\r\\n* webpack相关依赖有node-libs-browser和webpack\\r\\n* 其余都是单元测试相关依赖\\r\\n\\r\\n 注意, 这里使用了karma-webpack。因为使用Omi框架支持ES6+和ES5,使用karma-webpack是为了在单元测试里面使用ES6+的import和Class等语法。\\r\\n\\r\\n在karma.conf.js中配置webpack:\\r\\n\\r\\n```js\\r\\n webpack: webpackConfig,\\r\\n webpackMiddleware:{\\r\\n noInfo:false\\r\\n },\\r\\n plugins: [\\r\\n 'karma-webpack',\\r\\n 'karma-jasmine',\\r\\n 'karma-chrome-launcher'\\r\\n ]\\r\\n```\\r\\n\\r\\n具体配置看test目录下的karma.conf.js和webpack.test.config.js便可。\\r\\n\\r\\n注意, karma.conf.js需要设置\\r\\n\\r\\n```js\\r\\n// if true, Karma captures browsers, runs the tests and exits\\r\\nsingleRun: true,\\r\\n```\\r\\n\\r\\n不然, travis ci脚本执行的时候不会中断导致执行异常。\\r\\n\\r\\n### npm 脚本\\r\\n\\r\\n```js\\r\\n \\\"scripts\\\": {\\r\\n \\\"build\\\": \\\"webpack -w\\\",\\r\\n \\\"test\\\": \\\"karma start test/karma.conf.js\\\",\\r\\n \\\"hello\\\": \\\"webpack -w\\\",\\r\\n \\\"todo\\\": \\\"webpack -w\\\"\\r\\n }\\r\\n```\\r\\n\\r\\n其中: \\r\\n* npm run build : 生成dist目录的omi.js文件\\r\\n* npm run test : 执行单元测试\\r\\n* npm run hello : 编译hello的demo\\r\\n* npm run todo : 编译todo的demo\\r\\n\\r\\n在webpack.config.js中, 会根据 process.env.npm_lifecycle_event去设置不同的入口文件。所以同样是执行webpack -w, 执行结果可以不一样。\\r\\n\\r\\n \""
/***/ } ,
/* 25 */
/***/ function ( module , exports ) {
module . exports = "module.exports = \"<h2 id=\\\" Installation\\\">Installation</h2>\\r\\n\\r\\nOmi is open and modern framework for building user interfaces.\\r\\n\\r\\n### Installing Omi\\r\\n\\r\\nWe recommend using [npm](https://www.npmjs.com/) for managing front-end dependencies. If you're new to package managers.\\r\\n\\r\\nTo install Omi with npm, run:\\r\\n\\r\\n``` js\\r\\nnpm install omi\\r\\n``` \""
module . exports = "module.exports = \"<h2 id=\\\" 模板切换\\\">模板切换</h2>\\r\\n\\r\\nOmi有三个版本。其中的omi.js和omi.lite.js属于Web端使用的版本。\\r\\n\\r\\n* omi.js内置了[mustache.js](https://github.com/janl/mustache.js)作为模版引擎\\r\\n* omi.lite.js不包含任何模版引擎\\r\\n\\r\\nOmi不强制开发者使用mustache.js, 你可以根据业务场景使用任意模板引擎或者不使用模板引擎。\\r\\n\\r\\n那么怎么使用别的模板引擎? 下面拿[artTemplate](https://github.com/aui/artTemplate)作为例子。\\r\\n\\r\\n### 使用artTemplate\\r\\n\\r\\n```js\\r\\nOmi.template = function(tpl, data){\\r\\n return artTemplate.compile(tpl)(data);\\r\\n}\\r\\n```\\r\\n重写Omi.template方法, tpl为传入的模板, data为模板所需的数据, 返回值为HTML。\\r\\n重写完毕后就能在render使用artTemplate的语法, 如: \\r\\n\\r\\n```js\\r\\nclass List extends Omi.Component {\\r\\n constructor(data) {\\r\\n super(data);\\r\\n }\\r\\n\\r\\n style () {\\r\\n return `\\r\\n h1 { color:red; }\\r\\n li{ color:green;}\\r\\n `;\\r\\n }\\r\\n\\r\\n render () {\\r\\n return `<h1>{{title}}</h1>\\r\\n <ul>\\r\\n {{each list as value i}}\\r\\n <li>索引 {{i + 1}} : {{value}}</li>\\r\\n {{/each}}\\r\\n </ul>`;\\r\\n }\\r\\n}\\r\\n```\\r\\n\\r\\n### 相关地址\\r\\n\\r\\n* [演示地址](http://alloyteam.github.io/omi/example/artTemplate/)\\r\\n* [源码地址](https://github.com/AlloyTeam/omi/tree/master/example/artTemplate) \""
/***/ } ,
/* 26 */
/***/ function ( module , exports ) {
module . exports = "module.exports = \"<h2 id=\\\"Omi的理念\\\">Omi的理念</h2>\\r\\n\\r\\nOmi的理念是基于面向对象编程体系, 内建积木系统。\\r\\n 传统的单向数据流或者抛出event的组件通讯方式增加了系统的稳定性, 但是丧失了灵活性。一定程度上也降低了组建的复用。所谓鱼和熊掌不可兼得。\\r\\n 面向对象体系需要多一个逻辑层, 可以自由操作所有组件的instance, instance之间的逻辑关系构建出了整个程序。这样组建间的逻辑, 通信, 复用就全部迎刃而解。组建也更加单一职责, 更松耦合。\\r\\n\\r\\n对比函数式编程、命令式编程与面向对象编程, 可以归纳总结出下面几条: \\r\\n\\r\\n- 命令式编程干脆直接,利用循环条件等控制流程,强调执行过程\\r\\n- 命令式编程对硬件执行友好,运行更容易,却阻碍了复杂程序的设计\\r\\n- 函数式强调输入和输出,并非执行过程\\r\\n- 函数式倡导多个简单执行单元组合成复杂运算程序\\r\\n- 面向对象编程将对象作为程序的基本单元,更具有重用性、灵活性和扩展性\\r\\n\\r\\n Javascript是哪种类型的语言? 现在ES6+已经有了class。那么他是面向对象语言? \\r\\n但是JS可以在任意地方定义函数并且当作把函数当作值来传递。那么他是函数式编程语言? \\r\\n所以, 没有精准的定义, 取决于你的用法和姿势。其次, Web组件化架构层面编程模型和语言层面编程模型是非常自由的关系。意思就是, 你可以用Javascript构建函数式编程框架如React, 也可以基于面向对象体系搭建Omi。\\r\\n\\r\\n### 函数式编程 VS 面向对象编程\\r\\n\\r\\n在UI组件框架层面, 函数式编程的代表有React, Omi属于面向对象编程体系。那么他们各有什么优缺点? 下面做了个对比( 其实也是函数式编程与面向对象编程的对比) : \\r\\n\\r\\n| | React | Omi |\\r\\n| ------------- |:-------------:|:-----:|\\r\\n| 组件通信 | ★★★★☆| ★★★★★ |\\r\\n| 稳定性 | ★★★★★ | ★★★★☆ |\\r\\n| 灵活性 | ★★★★☆| ★★★★★ |\\r\\n| 扩展性 | ★★★★☆ | ★★★★★ |\\r\\n| 测试性 | ★★★★★ | ★★★★☆ |\\r\\n| 文件大小 | ★★★☆☆ | ★★★★★ |\\r\\n| 功能特性 | ★★★☆☆ | ★★★★☆ |\\r\\n| DOM性能 | ★★★★★ | ★★★★☆ |\\r\\n| 动画性能 | ★★★★☆ | ★★★★★ |\\r\\n| 抽象复杂度 | ★★★★☆ | ★★★★★ |\\r\\n| 异步编程 | ★★★★★ | ★★★★☆ |\\r\\n\\r\\n可以看得出, 鱼和熊掌不可兼得。面向对象编程更具有重用性、灵活性和扩展性, 带来的问题就是更加难测试。\\r\\n具体来说, 如函数式编程, 其测试面积是state1 + state2 + ... + stateN; 在面向对象编程中, 其测试面积是state1× event1 + state2× event2 + ... + stateN× eventN。\\r\\n\\r\\n总结来说, 更加推荐使用面向对象的方式去搭建UI组件化框架。\\r\\n\\r\\n<hr/>\\r\\n\\r\\n### 全文结束,感谢阅读。[开始Omi之旅吧!](https://github.com/AlloyTeam/omi)\\r\\n\\r\\n\""
/***/ } ,
/* 27 */
/***/ function ( module , exports ) {
module . exports = "module.exports = \"<h2 id=\\\"Hello World\\\">Hello World</h2>\\r\\n\\r\\n\\r\\n### Hello World with ES20XX \\r\\n\\r\\nWe recommend using a bundler like [webpack](https://webpack.github.io/) or [Browserify](http://browserify.org/) so you can write modular code and bundle it together into small packages to optimize load time.\\r\\n\\r\\nThe small Omi example looks like this:\\r\\n\\r\\n```js\\r\\nimport Omi from './omi.js';\\r\\n\\r\\nclass Hello extends Omi.Component {\\r\\n constructor(data) {\\r\\n super(data);\\r\\n }\\r\\n style () {\\r\\n return `\\r\\n h1{\\r\\n cursor:pointer;\\r\\n }\\r\\n `;\\r\\n }\\r\\n handleClick(target){\\r\\n alert(target.innerHTML);\\r\\n }\\r\\n render() {\\r\\n return `\\r\\n <div>\\r\\n <h1 onclick=\\\"handleClick(this)\\\">Hello ,{{name}}!</h1>\\r\\n </div>\\r\\n `;\\r\\n\\r\\n }\\r\\n}\\r\\n\\r\\nOmi.render(new Hello({ name : \\\"Omi\\\" }),\\\"body\\\");\\r\\n\\r\\n```\\r\\n\\r\\nThis code renders into body element. \\r\\n\\r\\n\\r\\n### Hello World with ES5\\r\\n\\r\\n\\r\\n```html\\r\\n<script src=\\\"omi.js\\\"></script>\\r\\n```\""
/***/ } ,
/* 28 */
/***/ function ( module , exports ) {
module . exports = "module.exports = \"<h2 id=\\\"Installation\\\">Installation</h2>\\r\\n\\r\\nOmi is open and modern framework for building user interfaces.\\r\\n\\r\\n### Installing Omi\\r\\n\\r\\nWe recommend using [npm](https://www.npmjs.com/) for managing front-end dependencies. If you're new to package managers.\\r\\n\\r\\nTo install Omi with npm, run:\\r\\n\\r\\n``` js\\r\\nnpm install omi\\r\\n```\""
/***/ } ,
/* 29 */
/***/ function ( module , exports , _ _webpack _require _ _ ) {
'use strict' ;
@ -1960,10 +2005,14 @@
var _index2 = _interopRequireDefault ( _index ) ;
var _list = _ _webpack _require _ _ ( 27 ) ;
var _list = _ _webpack _require _ _ ( 30 ) ;
var _list2 = _interopRequireDefault ( _list ) ;
var _config = _ _webpack _require _ _ ( 10 ) ;
var _config2 = _interopRequireDefault ( _config ) ;
function _interopRequireDefault ( obj ) { return obj && obj . _ _esModule ? obj : { default : obj } ; }
function _classCallCheck ( instance , Constructor ) { if ( ! ( instance instanceof Constructor ) ) { throw new TypeError ( "Cannot call a class as a function" ) ; } }
@ -1986,16 +2035,7 @@
_createClass ( Sidebar , [ {
key : 'install' ,
value : function install ( ) {
if ( this . data . lan === "cn" ) {
this . data . items = [ { title : "快速开始" , list : [ { "name" : "安装" } , { "name" : "Hello World" } , { "name" : "组件" } , { "name" : "组件通讯" } , { "name" : "生命周期" } , { "name" : "事件处理" } , { "name" : "条件判断" } , { "name" : "循环遍历" } , { "name" : "表单" } , { "name" : "继承" } ,
//{"name": "容器系统"},
{ "name" : "模板切换" } ,
//{"name": "服务器端渲染"},
{ "name" : "Omi的理念" } ] } , { title : "Omi原理" , list : [ { "name" : "未完待续" } , { "name" : "..." } , { "name" : "..." } , { "name" : "..." } ] } ] ;
} else {
this . data . items = [ { title : "QUICK START" , list : [ { "name" : "Installation" } , { "name" : "Hello World" } , { "name" : "Components" } , { "name" : "Lifecycle" } , { "name" : "Handling Events" } , { "name" : "Conditional Rendering" } , { "name" : "Lists and Keys" } , { "name" : "Forms" } , { "name" : "Inheritance" } , { "name" : "Sever-side Rendering" } , { "name" : "Thinking In Omi" } ] } , { title : "Omi's Principle" , list : [ { "name" : "Scroped CSS" } ] } ] ;
}
this . data . items = _config2 . default [ this . data . lan + '_menus' ] ;
this . data . height = window . innerHeight - 45 ;
this . childrenData = this . data . items ;
}
@ -2017,7 +2057,7 @@
exports . default = Sidebar ;
/***/ } ,
/* 27 */
/* 30 */
/***/ function ( module , exports , _ _webpack _require _ _ ) {
'use strict' ;
@ -2067,7 +2107,7 @@
exports . default = List ;
/***/ } ,
/* 28 */
/* 31 */
/***/ function ( module , exports , _ _webpack _require _ _ ) {
'use strict' ;