快速了解

在页面中用script标签引入drunk.js后可以通过以下例子快速了解基本的数据绑定的用法。

Hello World

<div>Hello {{message}}!</div>
// 创建一个组件实例,并挂载到body

var view = new drunk.Component({
  message: 'world'
});
view.$mount(document.body);

数据双向绑定

在标签上使用drunk-model属性进行双向绑定

<!--在输入框修改数据后,会更新p标签的内容-->
<body>
  <p>Hello {{message}}!</p>
  <input type="text" drunk-model="message" />
</body>
var view = new drunk.Component({
  message: 'world'
});
view.$mount(document.body);

渲染列表

<body>
  <ul>
    <li drunk-repeat="todo in todoList">
      {{todo.content}}
    </li>
  </ul>
</body>
var app = new drunk.Component({
  todoList: [
    {
      content: "看书"
    },
    {
      content: "洗澡"
    },
    {
      content: "睡觉"
    }
  ]
});
app.$mount(document.body);

注册事件

<body>
  <application>
    <p>This is the message: {{message}}!</p>
    <input type="text" drunk-model="message" />
    <button drunk-on="click: message = ''">清空输入框</button>
    <button drunk-on="click: clear()">清空输入框</button>
  </application>
</body>
// es5
var MyApp = drunk.Component.define({
  init: function () {
    this.message = 'default message';
  },
  clear: function () {
    this.message = '';
  }
});

// es6
class MyApp extends drunk.Component {
  init() {
    this.message = 'default message';
  }
  clear() {
    this.message = '';
  }
}

var app = new MyApp();
app.$mount(document.querySelector('application'));

完整的例子

<application>
  <input d-model="content" d-on="click: addTodo()">
  <ul>
    <li d-repeat="todo,index in todoList">
      <span>{{ todo.content }}</span>
      <button d-on="click: removeTodo(index)">移除</button>
    </li>
  </ul>
</application>
// 设置指令的前缀
drunk.config.prefix = 'd-';

// 声明一个组件
class MyTodoApp extends drunk.Component {
  init() {
    this.todoList = [];
    this.content = '';
  }
  addTodo() {
    if (!this.content || /\S/.test(this.content)) {
      return;
    }
    this.todoList.push(this.content);
    this.content = '';
  }
  removeTodo(index) {
    // this.todoList.$removeAt(index);
    this.todoList.splice(index, 1);
  }
}

var app = new MyTodoApp();
app.$mount(document.querySelector('application'));

results matching ""

    No results matching ""