(function(SKY){ var referenceSelectorDefaultOptions = { id: null, referencedType: null, } var referenceDefaultOptions = { url: null, descriptor: null, lookup: function(pattern,response){}, render: function(o){ return o; }, parse: function(src){ return src; }, identity:function(o){ return o; }, } class SKYReferenceSelector extends SKY.prototypes.SKYSelector { constructor(options){ super(); var self = this; this.options = Object.assign({}, referenceSelectorDefaultOptions); Object.assign(this.options,options); var html = $('') .attr("id",this.options.id) .skySelect({ type: this.options.referencedType, lookup: function(p,r){ self.options.referencedType.lookup(p,r); }, render: function(v){ return self.options.referencedType.render(v); }, }) .html(); /* .autocomplete({ source: function(request, response){ response( $.map( self.options.referencedType.lookup(request.term), function(item){ return self.options.referencedType.render(item); } ) ); }, select: function( ev, ui ){ alert(JSON.stringify(ui.item)); }, }); */ this.html( html ); this.lastSelectedItem = null; } valid(){ this.html().skySelect().valid(); } changed(){ var skySelect = this.html().skySelect(); return (skySelect.value() != this.lastSelectedItem); } value(val){ var skySelect = this.html().skySelect(); if (arguments.length) { this.lastSelectedItem = val; skySelect.value(val); return this; } return skySelect.value(); } } SKY.prototypes.SKYReferenceSelector = SKYReferenceSelector; class SKYReferencingType extends SKY.prototypes.SKYType { constructor(name,options){ super(name); this.options = Object.assign({}, referenceDefaultOptions); Object.assign(this.options, options); } editor(id){ return this.selector(id); } selector(id){ return new SKYReferenceSelector({ referencedType: this, id: id, }); } render(value){ return this.options.render(value); } parse(src){ return this.options.parse(src); } lookup(pattern,response){ this.options.lookup(pattern,response); } identity(value){ return this.options.identity(value); } } SKY.prototypes.SKYReferencingType = SKYReferencingType; }(SKY));