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