Aurelia @bindable *更改初始化调用

标签 aurelia

我发现当我为它定义一个@bindable 属性和一个 propertyChanged 处理程序时,它有时会在自定义组件的 bind() 方法之前被调用,有时则不会。

https://gist.run/?id=d7d9e7c7080f581f8e81b888268a2f11

在几个地方,我在一个属性上使用这些 propertyChanged 处理程序来触发对另一个属性的更新,在 @computedFrom 不合适的情况下,因为第二个值是一个复杂的计算,我不想称为 multiple次。

现在,我必须执行以下操作:

@bindable propOne;
@bindable propTwo;

propOneChanged(newVal) {
  propTwo = "something complex " + newVal;
}

bind() {
**  propOneChanged(propOne);**
}

有没有更好的方法来做到这一点(例如@bindable 装饰器中的某些东西),这样我就不需要手动“填充”bind() 中的属性?

最佳答案

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() 方法。那你就不用担心了。

如果您确实有一个bind() 方法,那么这是您调用更改处理程序的正确位置。

此外,我的印象是您并不完全确定可绑定(bind)对象的工作原理。

简单地说:@bindable 装饰器告诉 Aurelia 框架将该属性包装在 get + set 方法中(这发生在组件在其生命周期之前加载)。

set 方法在接收到与当前值不同的值时调用更改处理程序 - 当您将值分配给 bindable 时,将调用更改处理程序,无论组件是否绑定(bind),即使它不是 ViewModel。

所以为了解决您的评论:

it sometimes gets called before the custom component's bind() method and sometimes doesn't.

它将在自定义组件的 bind() 方法之前被调用,当且仅当您在自定义组件的 bind() 之前为其分配了一些值。例如,在构造函数或属性初始值设定项中。

关于Aurelia @bindable *更改初始化调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49925697/

相关文章:

javascript - Aurelia 使用 ES5 计算属性

javascript - 部署的 aurelia web 应用程序与在 gulp 上本地运行的应用程序有何不同

javascript - 无法调用 jQuery

typescript - 如何在具有 getter 和 setter 的属性上使用 Aurelia 的可绑定(bind)装饰器

css - 如何在我的 Aurelia 应用程序中导入包

javascript - Aurelia 中的图像源绑定(bind)

c# - 如何在 Web API 的响应中附加文件

javascript - 如何让网页上的图片自动刷新

javascript - 无法订阅 Aurelia 中的路由器事件(TypeScript)

javascript - Aurelia 激活函数永远不会被调用