问题标签 [property-observer]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
122 浏览

ios - 当其属性之一更改时,侦听数据模型数组中的更新

我有一个自定义UITableViewCell的数据模型数组,UILabel如下所示:

现在,CustomizationData 看起来像这样:

PickerOption 是:

我的问题是:

我想听一下customizationData 的choosenOption 的设置,并获取标题以将UILabel' 的文本更改为choosenOption 的价格。

我尝试将 didSet 添加到自定义数据中,但由于其属性之一正在更改,因此未调用它。不是自定义数据本身。

0 投票
3 回答
850 浏览

ios - 当你可以改变一个变量并且值无论如何都会改变时,为什么要使用 didSet 呢?

我通读了这个 SO didSet q&a和 Apple's Property Observers以及其他一些帖子。我似乎无法理解的是,在改变变量时使用 didSet 有什么好处,如果你在不使用属性观察器的情况下更改变量,它无论如何都会改变?

场景一:

场景二:

场景 3:

我在场景 3 中看到的唯一一件事是,如果不满足条件,那么 someVal 将不会改变。但是我可以简单地这样做,而不是将它添加到 didSet 中,并且会发生同样的事情。

那么除了在 didSet 观察者中添加条件之外还有什么好处呢?

0 投票
3 回答
456 浏览

swift - 为什么更改现有值的成员时会运行属性观察器?

请考虑这个 Swift 代码。我有一个类,它包装了另一个类的实例。当我在持有的值上设置一个属性时,包装类的属性观察器就会运行。

上面代码的输出是:

在 MyWrapperClass didSet
在 MyClass didSet
在 MyWrapperClass didSet

我知道didSet当变量的值发生变化时会调用它。

因此,当执行“Line1”的上述代码时,我知道打印了“In MyWrapperClass didSet”,这很好。

接下来当 Line2 执行时,我希望正确地打印“In MyClass didSet”,但我不确定为什么会打印“In MyWrapperClass didSet”,因为属性myValue没有改变。有人可以解释为什么吗?

0 投票
1 回答
145 浏览

oop - Lua 中的属性观察者

有没有办法在 Lua 中添加一个属性观察者,就像 Swift 对 WillSet 和 DidSet 的属性所做的那样?

例如,我有一个 display.newText 对象,每当我更改它的 text 属性时。我还需要做其他事情吗?像 object.text = "已更改"

我知道我可以添加像 setText() 之类的方法,但我正在寻找 Lua 语言的属性观察器。

提前致谢。

0 投票
1 回答
43 浏览

ios - KVO 全球范围

我正在学习 MVVM,所以我在属性上添加了观察者

当文本字段值从视图控制器更改时应该调用观察者,所以我registerModel.confirmPassword = strupdateField 方法设置

但是print语句没有被执行

但是如果我从init 方法中更改值,那么观察者正在工作!

如何使其全球化?

额外信息

我如何改变财产

0 投票
2 回答
341 浏览

ios - 数组的属性观察器,获取更改的索引

我有一个Array

我想添加一个didSet { },它知道实际更改的数组索引。

0 投票
1 回答
967 浏览

swift - UIViewController isEditing - 属性观察器不起作用

我试图在我的自定义 UIViewController 上实现属性观察器,但我注意到它不适用于 isEditing 属性。

你们知道为什么吗?

0 投票
1 回答
324 浏览

swift - 为什么属性观察器不适用于类?

使用游乐场。

我有以下结构:

我将其中的一个实例声明为属性观察者,默认值为 the 的“James”name和 的 33 age

尝试编辑name实例时:

我可以在日志上看到:

我的 foo 将是: Foo(name: "John", age: 33)

我的 foo 是:Foo(姓名:“James”,年龄:33)

这是我的期望。但是,当声明Foo为类而不是结构时:class Foo并运行完全相同的代码,日志上不会出现任何内容。

背后的原因是什么?

0 投票
0 回答
608 浏览

arrays - Swift 属性观察者:如果通过追加新数组来修改数组,为什么不对数组属性调用 didSet?

我有一个字符串数组,我还希望创建这个数组的本地化副本(同时保持原始数组不变)。

有很多方法可以做到这一点,但我想当非本地化数组的内容被修改时,我可能会使用属性观察器来设置本地化数组的内容。

我这样创建了一个测试属性观察器:

有趣的是,如果我一次修改一个元素的 cardThemeNames 数组,那么观察者的 didSet 方法就会如预期的那样被调用,即:

但是,如果我通过附加另一个数组来修改数组,则不会调用 disSet,即:

或者:

谁能解释为什么会这样并确认属性观察者是否通常只在修改集合的一个元素时才起作用?

谢谢。

0 投票
1 回答
229 浏览

binding - 使用 Aurelia Property Observer 忽略您自己的更改的最佳方法

我希望有人可以提供一些指导。

这是关于以最佳方式利用 Aurelia Observers。

这个例子是一个虚构的例子来说明感知到的问题。

假设我有三个数字属性:小时、分钟、秒,也就是 H、M、S,我希望构建一个监视 H、M、S 的对象,并且每次这三个更改中的任何一个时,它都会生成一个属性 T,它是字符串这看起来像一个持续时间,例如。"hh:mm:ss" 使用 H、M、S 属性和适当的零填充等。

相反,属性 T 绑定到用户界面中,因此如果用户修改 T(例如通过输入字段),我需要将 T 的各个部分分解为它们的 H、M、S 组件并将各个值推回进入 H、M、S 属性。

任何人都不应忘记,这种行为在“toView”和“fromView”行为方面与 Aurelia 值转换器的行为非常相似,除了我们在一侧处理 3 个属性,在另一侧处理 1 个属性.

在实现方面,我可以使用 BindingEngine 或 ObserverLocator 在 H、M、S 和 T 属性上创建观察者,并订阅这些更改通知。这一点很容易。

我的问题最终是这样的:

当 H 发生变化时,将触发对 T 的重新计算,因此我将向 T 写入一个新值。

更改 T 将触发 T 的更改通知,然后其处理程序将分解 T 的值并将新值写回 H、M、S。

写回 H、M、S 会触发另一个更改通知以生成新的 T,依此类推。

似乎不言自明的是——至少——当我的“转换器”对象写入 H、M、S、T 属性时,它应该以某种方式准备好自己以忽略它期望的更改通知即将到来的结果。

但是,说和做是两件不同的事情。

我的问题是——真的有必要吗?如果需要,我该如何以最简单的方式进行操作。这样做的障碍如下:

必须对值进行真正的更改才能生成更改通知,因此您需要提前知道您是否“期望”收到通知。更困难的问题是更改通知是通过 Aurelia “合成”微任务队列发出的,因此您非常不知道何时会收到该微任务调用。

那么,有没有很好的解决这个问题的办法呢?有没有人真的担心这一点,或者他们只是依靠第 1 点产生自限性的结果?也就是说,可能会有几个周期的更改通知,但该过程最终会默认吗?