我使用事件聚合发布方法从另一个视图更新视图。当我创建发布和订阅数据时,能够进入视图模型,但是没有在视图中使用分配的变量进行更新。如果我使用JavaScript填充值它正在工作但不能触发验证控制器。
预期结果为:
在下面的gist运行中,我有两个视图和视图模型。一个是注册表单,第二个是数据表单。在数据表单中,我有数据表,点击每一行我发布一个带有选定行数据的事件,这个已发布的事件我在注册表单视图模式中订阅。有关详细信息,请参阅下面的主题。
Gist run : https://gist.run/?id=8416e8ca1b9b5ff318b79ec94fd3220c
答案 0 :(得分:1)
两种可能的解决方案: (到“未定义”提醒)
将alert(this.email);
更改为alert(myself.email);
使用粗箭头语法进行订阅功能。更改:
this.ea.subscribe('MyrowData', function(obj){
至
this.ea.subscribe('MyrowData', obj => {
此语法允许新函数保留父项的上下文/范围,这意味着this.email
仍然可以访问。
另一个建议:
您可以按如下方式简化 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
定义中删除event
和PopulateData
(在 data-form.js 和数据中 - form.html 强>)。
当我实施这些建议时,您的数据也会得到正确验证。