我有以下代码
void onSelectionChangedFiredSources( Event event, var detail,
SelectCheckboxMenuComponent target)
{
// getItemModels returns a list of objects
getItemModels( target.selectedItems )
..forEach( (item)
{
switch( item.label )
{
case 'Ear':
toggleDialog( 'paper-dialog-transition-center',
$['ear-side-dialog']);
break;
case 'Eye':
toggleDialog( 'paper-dialog-transition-center',
$['eye-side-dialog']);
break;
case 'Nostril':
toggleDialog( 'paper-dialog-transition-center',
$['nostril-side-dialog']);
break;
case 'Thorax':
toggleDialog( 'paper-dialog-transition-center',
$['thorax-side-dialog']);
break;
default:
srcDataMap.add( item.label, item.selected);
}
});
}
当一个案例被触发时,我想打破foreach循环。
请注意,每次选择更改时,target.selectedItems表达式都会返回所有选择。所以,如果' Ear'是第一个选择,循环执行,当' Eye'然后选择列表返回将同时具有耳朵和眼睛。 这怎么做得最好? 感谢
答案 0 :(得分:5)
您无法中断forEach
来电。
您无法使用break
,因为它不是循环。它是一个函数调用,break仅在当前函数内有效。
你不能return
,因为这只会继续下一个元素。
你可以 throw
结束forEach
,但这并不好看。
您可以做的是完全不使用forEach
,而是使用for-in
循环,然后使用标记的中断使用break
:
void onSelectionChangedFiredSources(Event event, var detail,
SelectCheckboxMenuComponent target) {
// getItemModels returns a list of objects
var models = getItemModels(target.selectedItems);
loop: for (var item in models) {
switch (item.label) {
case 'Ear':
case 'Eye':
case 'Nostril':
case 'Thorax':
toggleDialog('paper-dialog-transition-center',
$['${item.label.toLowerCase()}-side-dialog']);
break loop;
default:
srcDataMap.add( item.label, item.selected);
}
}
}
您需要使用带标签的break
,因为如果没有标签,它只会破坏switch
声明。