javascript - dstore ( dojo ) 事件(添加)在集合上失火

标签 javascript dojo dstore

道场版本:1.10.0

数据存储版本:1.1.0

遵循的步骤。

1) 使用 dstore 内存创建内存存储 ( employeeStore )。

2) 通过应用创建了一个集合 salesEmployee filter.i,e employeeStore.filter({department:'sales'});

3) 在 salesEmployee 集合上添加了 add 事件监听器。

4) 在 employeeStore 中添加了一名新员工以及部门 会计employeeStore.add({name:'William', Department:'accounting'});

add 事件监听器即使附加到 salesEmployee 集合。

根据我的理解,事件监听器不应触发,因为该员工属于会计部门,并且监听器附加到salesEmpyoee集合。

这是jsfiddle .

require({
    packages: [
        {
            name: 'dstore',
    location: '//cdn.rawgit.com/SitePen/dstore/v1.1.0'
        }
    ]
}, [
    'dojo/_base/declare',
    'dstore/Memory',
    'dojo/domReady!'
], function(declare, DMemory ) {
    var employees = [
                        { name:'Jim', department:'accounting'},
                        { name:'Bill', department:'engineering'},
                        { name:'Mike', department:'sales'},
                        { name:'John', department:'sales'}
                    ];

    var employeeStore = new DMemory(
        {data:employees, 
         idProperty: 'name'});

    var salesEmployees = 
        employeeStore.filter({department:'sales'});

    salesEmployees.on('add', 
                      function(event){
                            alert(JSON.stringify(event.target));

                        });

    employeeStore.add({name:'William', department:'accounting'});

});

我的理解正确吗?

最佳答案

集合通常从它们起源的存储中继承添加/放置/删除方法。当 dstore 触发事件时,与该商店相关的所有集合都会收到通知。这主要是为了一致性,因为在存储基于服务器的情况下,不可能纯粹在客户端根据其范围/过滤器/排序标准确定每个事件是否适用于每个集合。诚然,对于可以能够过滤事件的简单情况来说,最一致的东西并不总是被证明是最方便的。

如果您要使内存存储可跟踪(使用 dstore/Trackable )并监听跟踪的集合,您应该能够通过检查 event.index 来区分与您的过滤器匹配的项目的事件。和event.previousIndex (对于被过滤掉的项目,两者都是 undefined)。

var TrackableMemory = declare([ Memory, Trackable ]);
var store = new TrackableMemory({ data: ... });
var collection = store.filter(...).track();
collection.on(...);

关于javascript - dstore ( dojo ) 事件(添加)在集合上失火,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30686498/

相关文章:

javascript - Leaflet:如何通过聚类从不同图层的下拉菜单中选择标记

javascript - jQuery datepicker maxDate 问题

json - Dojo 如何从 dojo.data.ItemFileReadStore 获取 JSON 属性

jquery - Dojo 相当于 jQuery $ ('html' )

javascript - 不能在函数中返回值/变量

java - dojo 的组合框可以容纳多少个最大值

javascript - Dojo dGrid/dStore 实时更新

Dojo dStore Rest dGrid 排序参数

javascript - 配置 dgrid 单元格以显示数据的完整宽度

javascript - 在循环中制作一个 jquery ajax POST