强制show.bind执行

时间:2016-07-28 13:51:16

标签: javascript aurelia

我有一个包含数据的表,我希望view能够在从另一个视图触发事件时检查show.bind语句。问题是事件没有改变当前视图中的任何数据。

foo.html:

 <tr repeat.for="entity of viewData.entities">
  ...
    <p if.bind="$parent.canBeRemoved(entity.id)">
     canBeRemoved
    </p>
 ...
 </tr>

我正在使用EventAggregator接收事件,我希望它强制刷新阵列。有可能吗?

2 个答案:

答案 0 :(得分:4)

使用signal绑定行为

处理此问题的最佳方法是通过信号绑定行为发送信号。

<强> template.html

<tr repeat.for="entity of viewData.entities">
  ...
  <p if.bind="$parent.canBeRemoved(entity.id) & signal:'update-view'">
    canBeRemoved
  </p>
  ...
</tr>

<强> viewModel.ts

import {BindingSignaler} from 'aurelia-templating-resources';

// grab a reference to the signaler
constructor(signaler: BindingSignaler) {
    this.signaler = signaler;
}

// and fire the signal event bound in your view
// whenever the event is handled
respondToEvent(event) {
    // do eventy things
    this.signaler.signal('update-view');
}

答案 1 :(得分:1)

您可以使用getter功能。例如:

JS

export class Entity {

    //@computedFrom('property1', 'property2')
    get canBeRemoved() {
       //your magic here
       //return true or false;
    }
}

HTML

 <tr repeat.for="entity of viewData.entities">
  ...
    <p if.bind="entity.canBeRemoved">
     canBeRemoved
    </p>
 ...
 </tr>