Aurelia @bindable *更改初始化调用
Aurelia @bindable *Changed calls on initialisation
我发现当我为它定义一个@bindable 属性 和一个 属性Changed 处理程序时,它有时会在自定义组件的 bind() 方法之前被调用,有时却不会。 t.
https://gist.run/?id=d7d9e7c7080f581f8e81b888268a2f11
在几个地方,我在一个 属性 上使用这些 属性Changed 处理程序来触发对另一个地方的更新,在 @computedFrom 不合适的情况下,因为第二个值是我不想多次调用的复杂计算。
现在,我必须执行以下操作:
@bindable propOne;
@bindable propTwo;
propOneChanged(newVal) {
propTwo = "something complex " + newVal;
}
bind() {
** propOneChanged(propOne);**
}
有没有更好的方法来做到这一点(例如@bindable 装饰器中的某些东西),这样我就不需要在 bind() 中手动 'prime' 和 属性?
Is there any better way to do this (e.g. something in the @bindable decorator) so that I don't need to manually 'prime' the property in the bind()?
没有
如果您没有 bind()
方法,Aurelia 将在 bind()
期间调用您的更改处理程序。除非您有特定的事情需要做(除了启动您的可绑定对象之外),删除 bind() 方法。那你就不用担心了。
如果您 有一个 bind()
方法,那么这是您调用更改处理程序的正确位置。
此外,我的印象是您并不完全确定可绑定项的工作原理。
简单地说:@bindable
装饰器告诉 Aurelia 框架将 属性 包装在 get
+ set
方法中(这发生在加载组件时,在其生命周期之前的方式)。
只要接收到与当前值不同的值,set
方法就会调用更改处理程序 - 当您将值分配给 bindable
时,更改处理程序将被调用,无论是否组件已绑定,即使它不是 ViewModel。
所以为了解决您的评论:
it sometimes gets called before the custom component's bind() method and sometimes doesn't.
它将在自定义组件的 bind() 方法之前被调用 当且仅当 您在自定义组件的 bind() 之前为其分配了一些值。例如,在构造函数或 属性 初始值设定项中。
xyChanged 原型是 xyChanged(newValue, oldValue)
。为了防止不必要的行为,我一直在做
if(oldvalue === null) return;
(在 bind() 之后直接为 null)。如果您使用异步模型请求,那么在大多数情况下,它在您的视图中进行空检查是有意义的
<div if.bind="model.data">...</div>
我发现当我为它定义一个@bindable 属性 和一个 属性Changed 处理程序时,它有时会在自定义组件的 bind() 方法之前被调用,有时却不会。 t.
https://gist.run/?id=d7d9e7c7080f581f8e81b888268a2f11
在几个地方,我在一个 属性 上使用这些 属性Changed 处理程序来触发对另一个地方的更新,在 @computedFrom 不合适的情况下,因为第二个值是我不想多次调用的复杂计算。
现在,我必须执行以下操作:
@bindable propOne;
@bindable propTwo;
propOneChanged(newVal) {
propTwo = "something complex " + newVal;
}
bind() {
** propOneChanged(propOne);**
}
有没有更好的方法来做到这一点(例如@bindable 装饰器中的某些东西),这样我就不需要在 bind() 中手动 'prime' 和 属性?
Is there any better way to do this (e.g. something in the @bindable decorator) so that I don't need to manually 'prime' the property in the bind()?
没有
如果您没有 bind()
方法,Aurelia 将在 bind()
期间调用您的更改处理程序。除非您有特定的事情需要做(除了启动您的可绑定对象之外),删除 bind() 方法。那你就不用担心了。
如果您 有一个 bind()
方法,那么这是您调用更改处理程序的正确位置。
此外,我的印象是您并不完全确定可绑定项的工作原理。
简单地说:@bindable
装饰器告诉 Aurelia 框架将 属性 包装在 get
+ set
方法中(这发生在加载组件时,在其生命周期之前的方式)。
只要接收到与当前值不同的值,set
方法就会调用更改处理程序 - 当您将值分配给 bindable
时,更改处理程序将被调用,无论是否组件已绑定,即使它不是 ViewModel。
所以为了解决您的评论:
it sometimes gets called before the custom component's bind() method and sometimes doesn't.
它将在自定义组件的 bind() 方法之前被调用 当且仅当 您在自定义组件的 bind() 之前为其分配了一些值。例如,在构造函数或 属性 初始值设定项中。
xyChanged 原型是 xyChanged(newValue, oldValue)
。为了防止不必要的行为,我一直在做
if(oldvalue === null) return;
(在 bind() 之后直接为 null)。如果您使用异步模型请求,那么在大多数情况下,它在您的视图中进行空检查是有意义的
<div if.bind="model.data">...</div>