首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >dstore ( dojo )事件(添加)在集合中未触发

dstore ( dojo )事件(添加)在集合中未触发
EN

Stack Overflow用户
提问于 2015-06-06 18:58:26
回答 1查看 194关注 0票数 1

dojo版本: 1.10.0

dstore版本: 1.1.0

所遵循的步骤。

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

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

3)在add集合中添加了salesEmployee事件侦听器。

( 4)在employeeStore中增加了一名新员工,包括部门会计(即employeeStore.add({name:'William', department:'accounting'}); )

即使add事件侦听器附加到salesEmployee集合,它也会触发。

根据我的理解,事件侦听器不应该触发,因为员工属于会计部门,侦听器连接到salesEmplyoee集合。

这是小提琴

代码语言:javascript
复制
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'});

});

我的理解正确吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-06-09 00:27:29

集合通常从它们起源的存储中继承add/put/remove方法。当dstore触发事件时,将通知与存储相关的所有集合。这在很大程度上是为了一致性,因为在存储基于服务器的情况下,不可能根据每个事件的范围/筛选/排序标准来确定纯客户端是否适用于每个集合。不可否认,最一致的东西并不总是被证明是最方便的简单的情况,可以有效地过滤事件。

如果要使内存中的存储可跟踪(使用dstore/Trackable)并侦听跟踪的集合,则应该能够通过检查event.indexevent.previousIndex来区分匹配筛选器的项的事件(对于已过滤的项,两者都是undefined )。

代码语言:javascript
复制
var TrackableMemory = declare([ Memory, Trackable ]);
var store = new TrackableMemory({ data: ... });
var collection = store.filter(...).track();
collection.on(...);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30686498

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档