我有一个对象的CollaborativeList,其状态在UI中被选中。用户可以采取的一个动作导致一个对象被移除,并且在其位置添加了许多对象。我有ValuesRemoved和ValuesAdded事件的处理程序,它们分别丢弃和添加新视图。如果选择了旧元素,那么设置新添加的UI元素的选择状态的最佳方法是什么?
我可以在进行在ValuesAddedEvent处理程序中检查的模型更改之前在控件类上设置一个标志,但这不允许我在修改的undo / redo上维护选择状态。撤消/重做似乎也没有采用导致原始事件的更改的复合操作名称列表,因此我也无法检查。
test('Compound Operation Names in undo', function() {
doc.getModel().beginCompoundOperation('a name');
doc.getModel().getRoot().set('key','value');
doc.getModel().endCompoundOperation();
var vc = function(event) {
deepEqual(event.compoundOperationNames, ['a name']);
};
doc.getModel().getRoot().addEventListener(gapi.drive.realtime.EventType.VALUE_CHANGED, vc);
doc.getModel().undo();
doc.getModel().getRoot().removeEventListener(gapi.drive.realtime.EventType.VALUE_CHANGED, vc);
});
测试失败,预期:['a name']
,实际:[]
答案 0 :(得分:1)
您可以使用IndexReferences跟踪模型中的选定范围。如果在您的应用程序中有意义的话,这将带来允许您向协作者显示信息的附带好处。
如果您不想坚持下去,那么我认为您应该能够通过查看更改集+当前选择来确定您何时处于这种情况。
如果列表中有ObjectChangedListener,您将获得一个包含复合操作中所有更改的事件。如果您有一组与行为匹配的更改,并且引用的索引是当前选择的一个,那么您知道您处于这种情况并且可以根据行为进行操作。