0

我正在使用事件聚合发布方法来更新从另一个视图的视图。当我创建发布并且订阅数据能够进入视图模型时,但是这不会在分配变量的情况下进行更新。如果我使用JavaScript来填充它的值,但它无法触发验证控制器。Aurelia验证和事件发布不更新值中的视图

预期的结果是:

  1. 从订阅方法我必须填充视图值。
  2. 之后,它应该触发验证值的变化。

在下面的要点中我有两个视图和视图模型。一种是注册形式,另一种是数据形式。在数据表中,我有表格和数据,点击每一行,我发布了一个选定行数据的事件,并且这个发布的事件是我在注册表单视图模式中订阅的。欲了解更多细节,请看下面的要点运行。

吉斯特运行https://gist.run/?id=8416e8ca1b9b5ff318b79ec94fd3220c

回答

1

两种可能的解决方案:(你的 “未定义” 警报)

  1. 变化alert(this.email);alert(myself.email);

  2. 使用日用于订阅功能的ick箭头语法。更改: this.ea.subscribe('MyrowData', function(obj){this.ea.subscribe('MyrowData', obj => { 此语法允许新函数保留父级的上下文/范围,这意味着this.email仍然可以访问。

另一个建议:

可以按如下步骤简化数据form.js功能:

变化: this.eventAggregator.publish('MyrowData', this.items[this.items.indexOf(item)]); 到: this.eventAggregator.publish('MyrowData', item);

这将因为你已经提供item在你的函数调用click.delegate="PopulateData(item, $event)"

事实上,你甚至可以从两个PopulateData定义删除$eventevent(在数据form.js数据form.html)。

当我实施这些建议时,您的数据也会被正确验证。

+0

谢谢我使用var myself = this;那么它会将这些值渲染到视图中。 – Rayudu

+0

太好了。仅供参考,使用粗箭头语法并不使用“我自己”可能是更好的做法。如果你做了上面的#2,你可以把所有'我'引用替换为'this'并且完全删除'我自己'变量。它会使代码更清晰。 – LStarky

+0

真棒,今天我通过接触你了解编码技巧。 – Rayudu