0.5.7 • Published 3 years ago

extag v0.5.7

Weekly downloads
7
License
MIT
Repository
github
Last release
3 years ago

Extag

Extag是一个基于组件和事件驱动的JavaScript MVVM库,用于构建Web用户界面。Extag提供了一个由文本、元素、片段和组件构成的Shell层。其中,组件支持模板、数据绑定等,具有良好的可扩展性,能够更好地组织用户界面,管理数据状态。通过监听和派发自定义属性更改事件,内嵌在组件模板中的数据绑定表达式得以生效,从而能够动态地改变Shell层的内容。Shell层一旦发生变化,Extag就会通过ExtagDOM以异步批量的模式,将变化的部分渲染到真实的DOM层。

快速开始

使用script标签简单地引入Extag和ExtagDOM。

<script src="https://unpkg.com/extag/dist/extag.js"></script>
<script src="https://unpkg.com/extag-dom/dist/extag-dom.js"></script>

或通过npm安装后引入Extag和ExtagDOM。

import Extag from 'extag'
import ExtagDOM from 'extag-dom'
Extag.conf('view-engine', ExtagDOM);

一个简单的Extag例子如下:

<div id="hello"></div>
// 定义一个组件子类
class Hello extends Extag.Component {
  static get template() {
    return  `<div class="hello">
                <h1>Hello, @{ name }!</h1> 
            </div>`;
  }
  static get attributes() {
    return {name: 'World'};
  }
}
// 创建一个组件实例
const hello = new Hello();
// 附着到一个元素上
hello.attach(ExtagDOM.query('#hello')); // hello.attach(document.getElementById('hello'));

我们定义了一个Hello类,继承自Component。组件模板中使用了一个单向的数据绑定表达式 @{ name }。包裹在 @{ } 内的自定义的特性 name 是可绑定的,其默认值为'World'。创建一个Hello类的实例,附着到页面上的一个元素上,'Hello, World!' 的字样就会渲染到页面上。

数据绑定 & 事件监听

我们在标签上使用 @= 绑定属性和表达式,使用 += 连接事件和处理函数:

class Hello extends Extag.Component {
  static get template() {
    return  `<div class="hello">
                <h1>Hello, @{ state.name }!</h1>
                <input value@="state.name" input+="onInput">
            </div>`;
  }
  setup() {
    return {
      state: new Extag.Model({
        name: 'World'
      }),
      onInput: this.onInput.bind(this)
    }
  }
  onInput(event) {
    this.state.name = event.target.value;
  }
}

特别地,对于 classstyle 的绑定,还可以是:

<a x:class="btn btn-next; disabled: @{page >= total};"
   x:style="margin: 5px; color: @{color}; font-size: @{fontSize}px;">
  下一页
</a>  

if条件 & for循环

<ul x:if="items != null">
  <li x:for="item of items">
    <span>@{ item.text }</span>
  </li>
</ul>

更多内容,请参阅文档

0.5.7

3 years ago

0.5.5

3 years ago

0.5.3

3 years ago

0.5.1

3 years ago

0.4.1

3 years ago

0.3.1

4 years ago

0.2.0

4 years ago