在NodeJS中创建一个类似knockoutjs的跟踪器
Creating a KnockoutJS-like tracker in NodeJS
所以我基本上只是试图添加观察者到Javascript的Getter/Setter函数,但还没有运气。
KnockoutJS (http://knockoutjs.com)对.track()
进行此操作。
使用track()
的YouTube视频示例:
https://www.youtube.com/watch?v=MNiUcuo3Wio
这导致我的第一个问题, __defineGetter__
和__defineSetter__
只适用于对象而不是字符串字面值吗?
这里有一个代码示例,说明这是如何理想地工作的,它可能会澄清一些事情。
// Knockout-like tracker in NodeJS.
function track(trackObj, callback) {
if (!trackObj) return;
trackObj.__defineCallback__ = callback;
trackObj.__defineGetter__('value', function() {
return 'something';
});
trackObj.__defineSetter__('value', function() {
console.log("fn called");
if (trackObj.__defineCallback__)
trackObj.__defineCallback__("new value");
});
}
var something = "track me!";
track(something, function(newValue) {
console.log("Something has changed to: " + newValue);
});
something = "I have changed."; // Trigger the update callback function.
我创建了一个简单的解决方案,尽管我不是很满意。因此,我暂时不回答这个问题。
缺点之一是您只能跟踪具有相同名称的单个属性。为了解决这个问题,您可以将以下代码放在NodeJS模块中,并为您想要跟踪的每个项目创建一个新的跟踪器对象。这也适用于同名变量。处理所有不同的跟踪器对象可能会让人感到困惑。
var tracker = {};
var trackerValues = {};
function track(trackName, callback) {
Object.defineProperty(tracker, trackName, {
set: function(toValue) {
trackerValues[trackName] = toValue;
if (callback) callback();
},
get: function() {
return trackerValues[trackName];
}
});
}
tracker.something = "track me!";
track("something", function() {
console.log("Something has changed to: " + tracker.something);
});
track("somethingElse", function() {
console.log("SomethingElse has changed to: " + tracker.somethingElse);
});
tracker.something = "I have changed.";
tracker.something = "I have changed again!";
tracker.somethingElse = "We can track multiple objects";
还有一个JSBin示例:
http://jsbin.com/bunonaca/1/edit?js,控制台
相关文章:
- 动态分配GA增强型电子商务跟踪器
- knockoutjs可观察数组
- 跟踪在页面加载时应用内联样式的JavaScript
- KnockoutJS-组件-多个实例
- 从复选框和Selects-KnockoutJS中获取值的总和
- 跟踪用户点击Adsense广告的IP地址
- 跟踪jqplot垂直折线图的鼠标位置
- 点击facebook像素跟踪注册(JS/JQUERY代码)
- 有没有一种方法可以从URL跟踪请求的域
- Javascript-在视频中跟踪鼠标位置
- 在Google Analytics中跟踪用户,但只能在两个操作之间跟踪
- 使用KnockoutJS绑定的YUI DataTable
- 如何使用Google Analytics跟踪表单提交
- observablearray KnockoutJs中的对象
- Fresh Spark Install+Homestead上的Vue异步堆栈跟踪错误
- 在foreach中加载所有项后,Knockoutjs组件回调
- 如何在knockoutjs按钮点击事件中添加谷歌广告词转换跟踪代码
- 使用KnockoutJs跟踪初始映射的最佳方式
- 跟踪标签与knockoutjs + twitter引导
- 在NodeJS中创建一个类似knockoutjs的跟踪器