3-17作业

来源:3-17 【学习任务】使用Proxy与Reflect实现双向绑定的列表

_jmxiao

2021-10-15

图片描述
图片描述
图片描述
老师,请问这样可以实现双向数据绑定吗?还有一个问题,双向数据绑定可以通过数据驱动视图,同时也可以通过视图去修改数据,但是上面好像只是实现了数据修改==>视图修改

写回答

1回答

谢成

2021-10-18

下面的代码可以作为参考:

const input = document.getElementById('input')

const text = document.getElementById('text')

const list = document.getElementById('list')

const btn = document.getElementById('btn')


let render


const inputObj = new Proxy({}, {

get(target, key, receiver) {

return Reflect.get(target, key, receiver)

},

set(target, key, value, receiver) {

if (key === 'text') {

input.value = value

text.innerHTML = value

}

return Reflect.set(target, key, value, receiver)

}

})


class Render {

constructor(arr) {

this.arr = arr

}

init() {

const fragment = document.createDocumentFragment()

for (let i = 0; i < this.arr.length; i++) {

const li = document.createElement('li')

li.textContent = this.arr[i]

fragment.appendChild(li)

}

list.appendChild(fragment)

}

addList(val) {

const li = document.createElement('li')

li.textContent = val

list.appendChild(li)

}

}


const todoList = new Proxy([], {

get(target, key, receiver) {

return Reflect.get(target, key, receiver)

},

set(target, key, value, receiver) {

if (key !== 'length') {

render.addList(value)

}

return Reflect.set(target, key, value, receiver)

}

})


window.onload = () => {

render = new Render([])

render.init()

}


input.addEventListener('keyup', e => {

inputObj.text = e.target.value

})


btn.addEventListener('click', () => {

todoList.push(inputObj.text)

inputObj.text = ''

})


0
2
花月夜F
老师请教下,todoList的set方法中if判断key !== 'length'是为什么?我自己不加这句,每次li后面会多出来一个数字
2024-09-15
共2条回复

JavaScript ES(6-11)全版本语法 前端都需要的基础课

前端无门槛学习,从ES6到ES11,一套课程掌握JS最新语法

1329 学习 · 296 问题

查看课程