组件实例

创建实例

创建drunk.Component实例作为一个view-model对象并挂载到指定的DOM元素上,是使用drunk进行MVVM开发的第一个步骤。

var viewModel= new drunk.Component(/* model */);
viewModel.$mount(document.getElementById('view'));

添加事件处理回调方法

viewModel.onSomeElementClick = function () {
  // Do somthing
};

属性绑定

所有在DOM元素上绑定的属性都会在实例上进行监听,当这些属性的值改变时会响应到绑定的DOM元素上。

<div id="view">Hello, {{message}}</div>
var viewModel = new drunk.Component();
viewModel.$mount(document.getElementById('view'));
viewModel.message = 'World';

message属性在viewModel实例创建时还没有被监听,当挂载到id为view的div上时,会对该div做数据绑定解析,并监听message属性并创建元素与viewModel实例的绑定;这时得到的message数据为undefined,在文本节点上并不会显示任何东西,当message属性被赋值为'World'的时候,会触发属性改变的通知,告诉绑定的节点更新。在实例被销毁前message属性可以在任何时候声明和赋值。

属性监听

var watcherCallback = function (newValue) {
 console.log('Result of "a + b":', newValue);
};

viewModel.$watch('a + b', watcherCallback);

可以能过实例的$watch(expression, callback)方法对表达式里的所有属性进行监听,这是除了在DOM元素上声明绑定的另一种方式。上面的语句中,ab属性的值的改变都会被监控到并触发watcherCallback回调。

实例的生命周期

new
 |==> 调用实例的init方法
 |==> 触发 drunk.Component.Event.created 事件(当作为子组件时)
$mount
 |==> 解析DOM元素上的所有数据绑定
      |==> 创建drunk.Binding实例
           |==> 解析绑定表达式
           |==> 创建drunk.Watcher实例
           |==> 把drunk.Binding的绑定更新方法注册到drunk.Watcher实例上
      |==> 触发所有绑定属性的更新,使所有绑定的DOM元素拿到当前的数据进行渲染
 |==> 触发drunk.Component.Event.mounted事件
$release
 |==> 触发drunk.Component.Event.release事件
 |==> 销毁所有的drunk.Binding实例
 |==> 销毁所有的drunk.Watcher实例
 |==> delete所有监听属性的getter/setter
 |==> 移除实例上的所有引用

results matching ""

    No results matching ""