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集合。
这是小提琴。
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'});
});我的理解正确吗?
发布于 2015-06-09 00:27:29
集合通常从它们起源的存储中继承add/put/remove方法。当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(...);https://stackoverflow.com/questions/30686498
复制相似问题