JavaScript-在修改属性/数据绑定时执行代码

JavaScript-在修改属性/数据绑定时执行代码,javascript,data-binding,Javascript,Data Binding,我正在尝试用JavaScript构建一个简单的绑定框架。我希望有一个具有getters和setters的模型,它可以保持所有内容的一致性,即更新一个属性可能会影响其他属性,然后使用JavaScript将其绑定到页面中的字段 我遇到的问题是,我需要在绑定时向模型上的setter添加一些额外的代码,以便更新属性时执行setter中已经存在的代码,以保持模型的一致性,然后更新绑定的输入 我考虑过重命名现有属性并添加一个具有原始名称的新属性,这样可以设置原始属性并更新输入,但我看不到重命名字段的方法 有

我正在尝试用JavaScript构建一个简单的绑定框架。我希望有一个具有
getters
setters
的模型,它可以保持所有内容的一致性,即更新一个属性可能会影响其他属性,然后使用JavaScript将其绑定到页面中的字段

我遇到的问题是,我需要在绑定时向模型上的setter添加一些额外的代码,以便更新属性时执行setter中已经存在的代码,以保持模型的一致性,然后更新绑定的输入

我考虑过重命名现有属性并添加一个具有原始名称的新属性,这样可以设置原始属性并更新输入,但我看不到重命名字段的方法

有没有办法用getter/setter重命名属性、修改setter或在setter中获取代码以便复制

或者,有没有其他方法来实现我的目标

我试图在业务逻辑(模型)和UI(html)之间保持分离,而不需要编写模型的人考虑UI/绑定

我也不想使用Angular或Knockout这样的大型库,因为页面中包含的代码非常有限,加上这是一个我们已经开发/维护了20多年的项目,所以我们不想使用一个具有大规模突破性更改(Angular)历史的库

我们目前需要支持IE10/11和Chrome/Edge/Firefox/Safari(iOS和Mac)的现代版本。然而,如果有什么东西不支持所有这些,我们愿意以“好”的方式做一个“坏”的回退,直到我们可以放弃IE的支持

如果有什么不同,我们将使用
TypeScript
来编写JavaScript

编辑: 自从提交我的问题,我发现。它表示可以使用以下命令重命名属性:

Object.defineProperty(o, new_key, Object.getOwnPropertyDescriptor(o, old_key));
delete o[old_key];
这适用于重命名简单变量类型属性,但不适用于使用getter和setter重命名属性。我不知道为什么,尽管当我对getter/setter属性执行
hasOwnProperty
操作时,它们返回false

编辑2:
原来TypeScript是针对原型而不是对象添加属性的,这就是它们无法访问的原因。我调用了
Object.getOwnPropertyDescriptor(o.\uu proto\uu,old\u key)
,这为我提供了所需的描述符。

我发现您可以通过执行以下操作来编辑/扩展setter:

var propDescriptor = Object.getOwnPropertyDescriptor(model, key);

propDescriptor.set = function (value) {
    setter.call(model, value);
    //Do extra stuff here
}

Object.defineProperty(model, key, propDescriptor);

这意味着该属性仍然保持一致性,同时允许您扩展它以更新绑定的输入字段。

看看,您可能会有一些想法。您能否发布一些代码来说明您试图实现的目标?同意@FedericoG,这不是一个简单的答案,发布一些示例代码将有助于我们帮助您。作为旁注,您可以在具有侦听器的道具上注册自定义的
发射器
,以反映修改后的数据。也许您可以尝试将
INotifiyPropertyChanged
C#
反映到您的代码中?