defi.js是一个包含十多个函数的库,这些函数使用getter和setter将有趣的功能添加到任何JavaScript对象中。
注意Gif(3.5MB)
资料库
作为Hello World,创建一个由名,姓和问候( demo )字段组成的小部件。
<input class="first"> <input class="last"> <output class="greeting"></output>
结果,如果first
或last
更改,事件处理程序将其报告给控制台, greeting
属性将自动更新,并且其元素将收到一个新值(默认为“ Hello,John Doe”)。 每当属性更改时都会发生这种情况,而无论如何更改都没有关系。 您可以使用代码obj.first = 'Jane'
或通过更改字段的值来设置值,所有其他更改将自动发生。
如果需要同步对象的属性和任意HTML元素的innerHTML
(在示例中,我们使用output
标记), bindNode
需要将所谓的“ binder”传递给bindNode函数,该函数负责如何使元素的状态与对象的属性同步。 默认情况下, bindNode
不知道如何使用非表单元素的节点。
const htmlBinder = { setValue: (value, binding) => binding.node.innerHTML = value, };
此外,您可以使用common-binders库中的 html
(这是通用粘合剂的集合)。
const { html } = require('common-binders');
API方法
有关所有方法的详细文档,可用的调用变体,标志等,可以在defi.js.org中找到。 值得一提的是,除了以下方法之外,defi.js还有一个用于路由的库: defi-router 。
- calc-创建对象的一个属性与其他属性(包括来自其他对象)的依赖关系。
defi.calc(obj, 'a', ['b', 'c'], (b, c) => b + c); obj.b = 1; obj.c = 2; console.log(obj.a);
defi.mediate(obj, 'x', value => String(value)); obj.x = 1; console.log(obj.x);
- on-添加事件处理程序。 文档站点上有一篇小文章描述了所有可能的事件。
defi.on(obj, 'change:x', () => { alert(`obj.x now equals ${obj.x}`); }); obj.x = 1;
defi.off(obj, 'change:x bind');
defi.on(obj, 'foo bar', (a, b, c) => { alert(a + b + c); }); defi.trigger(obj, 'foo', 1, 2, 3);
defi.bindNode(obj, 'myKey', '.my-element'); defi.unbindNode(obj, 'myKey', '.my-element');
defi.bindNode(obj, 'myKey', '.my-element'); const node = defi.bound(obj, 'myKey');
defi.chain(obj) .calc('a', 'b', b => b * 2) .set('b', 3) .bindNode('c', '.node');
defi.defaultBinders.unshift(element => {
const element = document.createElement('input'); element.type = 'text'; console.log(defi.lookForBinder(element));
defi.remove(obj, 'myKey');
- set-设置对象的属性,如setter一样,但是可以将某些数据传递给
change:KEY
事件处理程序。 您还可以将属性值的设置设置为“ silent”,即根本不调用change:KEY
。
defi.set(obj, 'myKey', 3, { silent: true });
defi.js是Matreshka.js框架的经过修订和简化的硬分叉,其中包括渲染数组,多个类和更多方法。 一些可能进入defi.js的方法已被其他方法的选项所代替,例如onDebounce
您可以通过传递once: true
或debounce: number
选项来使用on
方法,而不是once
和onDebounce
。
感谢您阅读到最后。 祝你有美好的一天。