Aurelia验证和事件发布不会更新View中的值

时间:2016-11-28 05:23:37

标签: aurelia aurelia-binding aurelia-validation aurelia-event-aggregator

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

预期结果为:

  1. 从subscribe方法我必须填写视图值。
  2. 之后,它应该触发对值更改的验证。
  3. 在下面的gist运行中,我有两个视图和视图模型。一个是注册表单,第二个是数据表单。在数据表单中,我有数据表,点击每一行我发布一个带有选定行数据的事件,这个已发布的事件我在注册表单视图模式中订阅。有关详细信息,请参阅下面的主题。

    Gist run https://gist.run/?id=8416e8ca1b9b5ff318b79ec94fd3220c

1 个答案:

答案 0 :(得分:1)

两种可能的解决方案: (到“未定义”提醒)

  1. alert(this.email);更改为alert(myself.email);

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

  3. 另一个建议:

    您可以按如下方式简化 data-form.js 功能:

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

    这样做会有效,因为您已在函数调用item中提供了click.delegate="PopulateData(item, $event)"

    事实上,您甚至可以从两个$event定义中删除eventPopulateData(在 data-form.js 数据中 - form.html )。

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