【问题标题】:Observe a change in a boolean array观察布尔数组的变化
【发布时间】:2017-11-16 14:37:00
【问题描述】:

我有一个组件可以观察一组项目:

itemsChanged: Ember.observer('items', 'items.[]', 'items.@each' function () {
    // ...code...
}),

当我有一个带有布尔属性的对象数组时,这很好用。

Array(arraySize).fill(false, 0).fill(true, 0, 1).map(model => WrapperBool.create({ model }))

但是,我怎样才能让它观察到布尔数组何时发生值变化?数组的大小始终相同。

Array(arraySize).fill(false, 0).fill(true, 0, 1)

【问题讨论】:

    标签: ember.js observers


    【解决方案1】:

    您需要使用符合 KVO(KeyValueObservable) 的方法进行修改, 添加需要pushObject而不是push,修改需要addObject,才会触发相应的观察者。

    在您的情况下,依赖键 items.[] 就足够了。你不应该使用items.@each(我认为它已被弃用,但我不确定,无论如何你可以使用items.[]它会处理添加/删除项目)。

    application.js,

    import Ember from 'ember';
    export default Ember.Controller.extend({  
      items:[true,false],
      itemsChanged:Ember.observer('items.[]',function(){
        console.log(' items ',this.get('items'));
      }),
      actions:{
        test(){      
          this.get('items').addObject(true);
        }
      }
    });
    

    应用程序.hbs

    <h1{{action 'test'}}>Welcome to {{appName}}</h1>
    {{items}}
    

    sample twiddle

    【讨论】:

    • 我没有添加或删除项目。这是一个固定大小的数组。我唯一要做的就是改变布尔值。
    • 所以你应该像这样使用this.get('items').replace(1,1,[true]);,它会触发观察者,如果你不想这样做,那么你可以调用notifyPropertyChange方法,这将通知所有观察者要开火..Modifed twiddle
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-04
    • 2011-07-03
    • 1970-01-01
    • 2011-09-21
    • 2021-05-04
    • 2021-09-08
    相关资源
    最近更新 更多