You could try with the filter function:
var select = new ol.interaction.Select({
condition: ...,
filter: function(feature, layer){
console.info(feature);
console.info(layer.get('name'));
}
});
UPDATE
I came up with this prototypied method, it does the job:
http://jsfiddle.net/jonataswalker/r242y7ke/
/**
* This is a workaround.
* Returns the associated layer.
* @param {ol.Map} map.
* @return {ol.layer.Vector} Layer.
*/
ol.Feature.prototype.getLayer = function(map) {
var this_ = this, layer_, layersToLookFor = [];
/**
* Populates array layersToLookFor with only
* layers that have features
*/
var check = function(layer){
var source = layer.getSource();
if(source instanceof ol.source.Vector){
var features = source.getFeatures();
if(features.length > 0){
layersToLookFor.push({
layer: layer,
features: features
});
}
}
};
//loop through map layers
map.getLayers().forEach(function(layer){
if (layer instanceof ol.layer.Group) {
layer.getLayers().forEach(check);
} else {
check(layer);
}
});
layersToLookFor.forEach(function(obj){
var found = obj.features.some(function(feature){
return this_ === feature;
});
if(found){
//this is the layer we want
layer_ = obj.layer;
}
});
return layer_;
};
select.on('select', function(evt){
var feature = evt.selected[0];
if(feature){
var layer = feature.getLayer(map);
console.info(layer.getStyle());
console.info(layer.get('name'));
}
});