我正在努力理解 Meteor 的 Deps.Dependency 工具。在文档中,它说:
Dependency 表示计算可能依赖的反应数据的原子单元。
要在上下文中查看此内容,请转到此处。
我四处寻找“数据的原子单元”的定义,但找不到它的定义。有谁知道具体是什么意思?“数据单元”是有道理的——我想我试图理解要包含“原子”这个词的假设特征。
Atomic(曾几何时)的意思是“不能分成更小的部分”。从那时起,我们学会了分裂原子,所以化学的类比并不真正成立。
然而,数据的原子单元是不能(明智地)分解成更小的部分的数据。什么构成“较小的部分”当然是非常主观的。整数是原子的吗?如果我把它分解成用于在内存中表示它的字节怎么办?我如何将这些字节进一步分解成位?你可以看到这很快就会变得乏味。
出于您的目的,我认为存储在数据库表的单元格中的任何值都是原子的。
我绝不是 Meteor 方面的专家,从未真正使用过它。我只是对当前的框架感兴趣,想知道它们是关于什么的。
Meteor 是围绕一种 MVC 模式构建的。每当模型中的数据发生变化时,所有通用视图都会更新。广义是指视图不必是 UI 元素。
这是通过Deps.Dependency
对象来实现的。在链接中的示例中,weather
对象由weatherDep
依赖项“保护”。
当天气变化时,依赖项被触发,所有依赖于天气信息的视图都被重新计算/渲染。
在这种情况下,天气被认为是数据的原子单位。
现在在示例中,天气是单个字符串,但即使天气包含多条信息,同样的原则也适用;说降水量和温度。
那么什么是数据的原子单位?
无论数据模型的创建者认为它是什么。
对于上面的示例,假设您的页面上有一个天气小部件。这个小部件使用天气数据并创建一个图像,其中包含天气(云、雨、太阳等)和一个角落的温度的图形表示。对于这个widget来说,天气是一个数据的原子单元,如果构成天气的任何一条信息发生变化,就需要重新绘制整个widget。
例如,第二个小部件可以仅显示温度。你可以让这个小部件依赖于天气数据,但这意味着即使只有降水发生变化,它也会被重新计算,所以你可能决定有两个依赖项;一个用于整个天气对象,一个用于温度。在一种情况下,天气是数据的原子单位,在另一种情况下是温度。
在这种情况下,您将需要两组函数,以便温度小部件调用depends()
正确的依赖项。
修改后的代码:
var 天气 = {降水:0.5,温度:20}; var weatherDep = 新的 Deps.Dependency; var temperatureDep = new Deps.Dependency; var getWeather = 函数 () { weatherDep.depend() 返回天气; }; var getTemperature = 函数 () { temperatureDep.depend() 返回天气; }; var setWeather = 函数 (w) { 天气 = w; // (可以在这里添加逻辑只调用 changed() // 如果新值与旧值不同) weatherDep.changed(); temperatureDep.changed(); }; var setTemperature = 函数 (t) { 天气.温度 = t; // (可以在这里添加逻辑只调用 changed() // 如果新值与旧值不同) temperatureDep.changed(); };
您链接中的文档说明了很多,我希望我的解释更清楚。