javascript - 如何引发属性(property)变更事件?

标签 javascript node.js propertychanged

我有以下 JavaScript 数据模型:

function User(uid, usr_name, usr_pwd, usr_enbld) {
    var id = uid == null ? uuid.v4() : uid;
    var name = usr_name;
    var password = usr_pwd;
    var enabled = usr_enbld;

    Object.defineProperty(this, "id", {
        get: function () {
            return id;
        }
    });

    Object.defineProperty(this, "name", {
        get: function () {
            return name;
        },
        set: function (value) {
            name = value;
        }
    });

    Object.defineProperty(this, "password", {
        get: function () {
            return password;
        },
        set: function (value) {
            password = value;
        }
    });

    Object.defineProperty(this, "enabled", {
        get: function () {
            return enabled;
        },
        set: function (value) {
            if (!value instanceof Boolean) {
                // log - type error, must be true/false
                return;
            }
            enabled = value;
        }
    });
}

我试图找出当其中一个属性发生更改时如何引发事件。我为nodejs找到的观察者库似乎都非常困难。也许我没有正确实现它,但我认为我可以在“propertyChanged”事件上使用bindtrigger`。但这没有用。

最佳答案

我认为 ECMAScript 中尚未包含此功能,但稍后他们将提供类似 Object.observe 的内容,它将对象绑定(bind)到一个函数。

如果您使用的是 chrome 36 或更高版本,您应该能够在控制台中使用它。

// Let's say we have a model with data
var model = {};

// Which we then observe
Object.observe(model, function(changes){

    // This asynchronous callback runs
    changes.forEach(function(change) {

        // Letting us know what changed
        console.log('Printing Changes.');
        console.log(change.type, change.name, change.oldValue);
    });

});

现在,如果您要添加、删除或修改模型的属性,它将调用该函数。

您可能想查看watch ,但是如果你看看 MDN,他们说不建议使用这个。

注意:-如果你想将Observenode一起使用,它在当前稳定版本的nodejs中不可用,但你可以使用 Node v0.11.* 支持此功能。

如果您使用的是node v0.11,请确保运行您的程序

node --harmony filename.js

关于javascript - 如何引发属性(property)变更事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27996033/

相关文章:

c# - WPF应用程序在并发环境中被PropertyChangedEventManager挂起

javascript - 如何在 HTML5 网站中创建二维码阅读器?

javascript - 在存在相同表单的按钮的情况下,如何在文本输入字段上触发回车键事件?

javascript - jshint 无法识别 devel

javascript - 为什么express会匹配两条路线?

java - 枚举方法的通用返回类型

javascript - 如何动态更改 dataTable jQuery 插件的列标题?

javascript - 为浏览器代码导入 geofire-common 和 firestore

node.js - 抓取页面上的链接,然后使用 node 和 zombie.js 访问和检查每个链接

c# - 使用操作作为参数覆盖方法