dropdownlist绑定数据库怎么用 详解dropdownlist控件用法(2)
dropdownlist绑定数据库怎么用
然后我们创建的每个 Web 组件都扩展了这个 CustomElement 基类:
export class MyComponent extends CustomElement
如果你想直接查看代码,可以访问 Github 链接。
我们将 CustomElement 的内部 state 属性绑定到视图来实现数据绑定:
class CustomElement extends HTMLElement { constructor() { super(); this.state = {}; }}
我的第一个想法是将 this.state 实现为 Proxy,这样 state 对象的任何突变都将被自动拦截;但由于 Proxy 可能会影响性能,因此我决定实现一个 setter,它还能同时设置多个属性:
class CustomElement extends HTMLElement { ... setState(newState) { Object.entries(newState) .forEach(([key, value]) => { this.state[key] = this.isObject(this.state[key]) && this.isObject(value) ? {...this.state[key], ...value} : value; }); }}
setState 方法遍历 newState 对象的所有条目,并将所有值设置为 this.state 上的对应属性,随后我们就应该使用这些值来更新视图。
通过标准 data 属性将值绑定到视图上,在本例中为 data-bind:
<p data-bind="title"></p>
这里的 textContent 绑定到负责管理视图的组件内的 this.state.title 的值上:
class DemoElement extends CustomElement { constructor() { super(); const shadowRoot = this.attachShadow({mode: 'open'}); shadowRoot.innerHTML = ` <p data-bind="title"></p> `; }}const element = document.querySelector('demo-element');element.setState({title: 'Hello World'});// the paragraph will now contain the text "Hello World"
这种绑定可以达到任意深度,所以下面这种情况也能做到:
<p data-bind="user.address.city"></p>element.setState({ user: { address: { city: 'Amsterdam' } }});---> <p>Amsterdam</p>
还可以将数据绑定到 Web 组件的特定属性。在此示例中,数据绑定到的 title 属性上:
<parent-element> <demo-element data-bind="title:name"></demo-element></parent-element>parentElement.setState({name: 'foo'}); //demoElement.title === 'foo'
视图的更新实际是在 CustomElement 中的 updateBindings 方法中实现的。通过 setState 方法更新 state 时,它会解析更新的属性以查找绑定到这些属性的 HTML 元素。
例如下面这样:
element.setState({ user: { address: { city: 'Amsterdam' } }});
更新 Web 组件内的
this.state.user.address.city,并将数据对象中的键转换为 user.address.city,然后使用它来查找这个数据绑定的元素:
const elements = this.shadowRoot.querySelectorAll('[data-bind$="user.address.city"]');
这将查找所有的 data-bind 属性以 user.address.city 结尾的元素(注意 data-bind 结尾的),因此它将找到 data-bind=“user.address.city”,但也可以找到 data-bind=“ name:user.address.city“,其中数据专门绑定到 name 属性。
每当数据绑定到元素的特定属性(如 data-bind=“name:user.address.city”)时,组件将检查该元素是否也是扩展 CustomElement 的 Web 组件;如果是,则通过它的 setState 方法更新该属性。这样,数据绑定就能一直传播到所有子组件上。
相关阅读
-
dnf卡在正在连接服务器怎么办 无法连接服务器解决方法
关于dnf卡在正在连接服务器怎么办和无法连接服务器解决方法的相关话题,接下来IT袋小编就来介绍。 DNF黑屏显示正在连接服务器,怎么解决?这是一个老问题,自从去年就存在了。想不到最
-
数据库系统有哪些特点 简述数据库系统的定义
IT电脑小知识篇,关于数据库系统有哪些特点和简述数据库系统的定义IT技巧方面的经验,具体内容如下: 数据库分类: 早期数据库模型有三种,分别为层次式数据库、网络式数据库和关系型
-
怎么创建网络平台账号 创建网站免费注册
关于这个怎么创建网络平台账号和创建网站免费注册方面的知识,具体详情如下: 在当下,传统的线下营销渠道已经无法满足消费者的多样化需求,所以很多企业商家都会选择搭建一个网站平
-
access数据库的对象是什么 了解access数据库的结构层次
下面为网友们详细介绍access数据库的对象是什么和了解access数据库的结构层次方面的内容,接下来分享详细内容。 说到数据处理,大家首先想到的是Excel,其实,Office中的数据处理软件除了E


