【问题标题】:Aurelia : Refresh view with a Map valueAurelia:使用地图值刷新视图
【发布时间】:2016-10-06 20:44:29
【问题描述】:

在 viewModel 中,我有一个每 5 秒刷新一次的地图:

 Constructor(){
        this myMap=new Map();

    }
    activate(){
       //for example :
       value=7;
       id=1;
       setInterval(()=>{
          this.myMap.set(id, value++);
          });
        },5000);
    }

在视图中:

<template>
  <div class="container">
  <h2>${titre}</h2>
  <p class="nb-values-OK">
    ${myMap.get(1)}
  </p>
  </div>
</template>

间隔触发时什么都没有发生...有什么方法可以在计时器触发时刷新我的视图?

事实上,在现实世界中,我有车道,在这些车道上有一些活动;所以我的地图在车道 ID 和该车道上发生的活动数量之间建立了联系。在我看来,地图是排序这个的最简单的方法...... 无论如何,我的第一个问题是关于如何让我的视图每 5 秒刷新一次。

提前感谢您的帮助。 `

(希望我的英语足够好,可以理解:))。

【问题讨论】:

    标签: javascript aurelia


    【解决方案1】:

    您需要在回调函数中使用bind(this) 来访问内部模型数据,例如this.myMap

    Constructor(){
        this myMap=new Map();
    }
    
    activate(){
        //for example :
        value=7;
        id=1;
        setInterval(function(){
            this.myMap.set(id, value++);
        }.bind(this), 5000);
    }
    

    如果您需要观察和更新复杂数据,则可以使用many bindable behaviors。最简单的解决方案——使用信号api(每次发送特殊信号时,视图绑定值都会更新):

    model.js

    import {inject} from 'aurelia-dependency-injection';
    import {BindingSignaler} from 'aurelia-templating-resources';
    
    @inject(BindingSignaler)
    export class SampleView {
    
      constructor(signaler) {
        this.signaler = signaler;
      }
    
      activate() {
        this.data = new Map();
        this.data.set(1, 1);
    
        // data changing by interval and send update signal
        setInterval(function(){
          this.data.set(1, this.data.get(1) + 1);
          this.signaler.signal('need-update');
        }.bind(this), 1000);
      }
    }
    

    model.html

    <template>
      <h1>${data.get(1) & signal:'need-update'}</h1>
    </template>
    

    附言

    对于自定义属性或表达式观察者,您可以使用 BindingEngine(在地图值更改时创建事件)。请参阅该主题中的示例:Property change subscription with Aurelia

    您也可以尝试 BindingEngine 中的 expressionObserver(观察数组或“内部”对象值):https://stackoverflow.com/a/33482172/1276632

    【讨论】:

    • 谢谢,坦率地说,我已经看到了这个链接binding-behavior,但我没有抓住这个东西:(你的例子澄清了它:)现在它可以工作了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-03
    • 2019-08-30
    • 2014-11-14
    • 2022-01-15
    相关资源
    最近更新 更多