JavaScript/jQuery Lookup - Customize Item Appearance
For a minor customization of Lookup items, you can define specific fields in item data objects. For example, the following code generates three items: the first is not customized, the second is disabled and the third is hidden.
jQuery
$(function() {
$("#lookupContainer").dxLookup({
valueExpr: 'text',
displayExpr: 'text',
dataSource: [
{ text: "HD Video Player" },
{ text: "SuperHD Video Player", disabled: true },
{ text: "SuperPlasma 50", visible: false }
]
});
});Angular
<dx-lookup
[dataSource]="lookupDataSource"
valueExpr="text"
displayExpr="text">
</dx-lookup>
import { DxLookupModule } from "devextreme-angular";
// ...
export class AppComponent {
lookupDataSource = [
{ text: "HD Video Player" },
{ text: "SuperHD Video Player", disabled: true },
{ text: "SuperPlasma 50", visible: false }
];
}
@NgModule({
imports: [
// ...
DxLookupModule
],
// ...
})Vue
<template>
<DxLookup
:data-source="dataSource"
value-expr="text"
display-expr="text"
/>
</template>
<script>
import 'devextreme/dist/css/dx.light.css';
import { DxLookup } from 'devextreme-vue/lookup';
export default {
components: {
DxLookup
},
data() {
return {
dataSource: [
{ text: 'HD Video Player' },
{ text: 'SuperHD Video Player', disabled: true },
{ text: 'SuperPlasma 50', visible: false }
]
};
}
}
</script>React
import React from 'react';
import 'devextreme/dist/css/dx.light.css';
import { Lookup } from 'devextreme-react/lookup';
const dataSource = [
{ text: 'HD Video Player' },
{ text: 'SuperHD Video Player', disabled: true },
{ text: 'SuperPlasma 50', visible: false }
];
class App extends React.Component {
render() {
return (
<Lookup
dataSource={dataSource}
valueExpr="text"
displayExpr="text"
/>
);
}
}
export default App;If you need a more flexible solution, define an itemTemplate.
jQuery
const lookupData = [{
id: 1,
name: "HD Video Player",
imgSrc: "images/products/1-small.png"
}, {
id: 2,
name: "UltraHD Player",
imgSrc: "images/products/2-small.png"
},
// ...
];
$(function() {
$("#lookupContainer").dxLookup({
dataSource: lookupData,
valueExpr: 'id',
displayExpr: 'name',
itemTemplate: function (itemData, itemIndex, itemElement) {
return $("<div />").append(
$("<img />").attr("src", itemData.imgSrc),
$("<p />").text(itemData.name)
.css("display", "inline-block")
.css("font-style", (itemIndex % 2 == 0) ? "italic" : "normal")
);
}
});
});Angular
<dx-lookup
[dataSource]="lookupDataSource"
valueExpr="id"
itemTemplate="lookupItem">
<div *dxTemplate="let item of 'lookupItem'; let i = index">
<img src="{{item.imgSrc}}"/>
<div
style="display:inline-block"
[style.font-style]="i % 2 == 0 ? 'italic' : 'normal'">
{{item.name}}
</div>
</div>
</dx-lookup>
import { DxLookupModule } from "devextreme-angular";
// ...
export class AppComponent {
lookupDataSource = [{
id: 1,
name: "HD Video Player",
imgSrc: "images/products/1-small.png"
}, {
id: 2,
name: "UltraHD Player",
imgSrc: "images/products/2-small.png"
},
// ...
];
}
@NgModule({
imports: [
// ...
DxLookupModule
],
// ...
})Vue
<template>
<DxLookup
:data-source="dataSource"
value-expr="id"
item-template="item">
<template #item="{ data, index }">
<div>
<img :src="data.imgSrc"/>
<div
:style="{'display': 'inline-block', 'font-style': index % 2 === 0 ? 'italic' : 'normal'}">
{{data.name}}
</div>
</div>
</template>
</DxLookup>
</template>
<script>
import 'devextreme/dist/css/dx.light.css';
import { DxLookup } from 'devextreme-vue/lookup';
export default {
components: {
DxLookup
},
data() {
return {
dataSource: [{
id: 1,
name: "HD Video Player",
imgSrc: "images/products/1-small.png"
}, {
id: 2,
name: "UltraHD Player",
imgSrc: "images/products/2-small.png"
},
// ...
]
};
}
}
</script>React
import React from 'react';
import 'devextreme/dist/css/dx.light.css';
import { Lookup } from 'devextreme-react/lookup';
const dataSource = [{
id: 1,
name: "HD Video Player",
imgSrc: "images/products/1-small.png"
}, {
id: 2,
name: "UltraHD Player",
imgSrc: "images/products/2-small.png"
},
// ...
];
const renderItem = (data, index) => {
return (
<div>
<img src={data.imgSrc}/>
<div
style={{display: 'inline-block', fontStyle: index % 2 === 0 ? 'italic' : 'normal'}}>
{data.name}
</div>
</div>
);
};
class App extends React.Component {
render() {
return (
<Lookup
dataSource={dataSource}
valueExpr="id"
itemRender={renderItem}
/>
);
}
}
export default App;jQuery
You can also customize an individual Lookup item. For this purpose, declare a template for this item as a script and pass its id to the template field.
<script id="individualTemplate" type="text/html">
<!-- ... -->
</script>
const lookupData = [
{ text: "SuperHD Player"},
{ text: "HD Video Player", template: $("#individualTemplate") },
// ...
];Using similar techniques, you can customize the input field of the Lookup. The template for it should be assigned to the fieldTemplate property.
jQuery
$(function() {
$("#lookupContainer").dxLookup({
dataSource: lookupData,
valueExpr: 'id',
displayExpr: 'name',
fieldTemplate: function(itemData, itemElement) {
return $("<div />").append(
$("<img />").attr("src", itemData.imgSrc)
);
}
});
});Angular
<dx-lookup
[dataSource]="lookupDataSource"
valueExpr="id"
displayExpr="name"
fieldTemplate="inputField">
<div *dxTemplate="let item of 'inputField'">
<img src="{{item.imgSrc}}" />
</div>
</dx-lookup>
import { DxLookupModule } from "devextreme-angular";
// ...
export class AppComponent {
lookupDataSource = [{
id: 1,
name: "HD Video Player",
imgSrc: "images/products/1-small.png"
}, {
id: 2,
name: "UltraHD Player",
imgSrc: "images/products/2-small.png"
},
// ...
];
}
@NgModule({
imports: [
// ...
DxLookupModule
],
// ...
})Vue
<template>
<DxLookup
:data-source="dataSource"
value-expr="id"
display-expr="name"
field-template="fieldInput">
<template #fieldInput="{ data }">
<img :src="data && data.imgSrc"/>
</template>
</DxLookup>
</template>
<script>
import 'devextreme/dist/css/dx.light.css';
import { DxLookup } from 'devextreme-vue/lookup';
export default {
components: {
DxLookup
},
data() {
return {
dataSource: [{
id: 1,
name: "HD Video Player",
imgSrc: "images/products/1-small.png"
}, {
id: 2,
name: "UltraHD Player",
imgSrc: "images/products/2-small.png"
},
// ...
]
};
}
}
</script>React
import React from 'react';
import 'devextreme/dist/css/dx.light.css';
import { Lookup } from 'devextreme-react/lookup';
const dataSource = [{
id: 1,
name: "HD Video Player",
imgSrc: "images/products/1-small.png"
}, {
id: 2,
name: "UltraHD Player",
imgSrc: "images/products/2-small.png"
},
// ...
];
const renderField = (data) => {
return (
<img src={data && data.imgSrc}/>
);
};
class App extends React.Component {
render() {
return (
<Lookup
dataSource={dataSource}
valueExpr="id"
displayExpr="name"
fieldRender={renderField}
/>
);
}
}
export default App;See Also
If you have technical questions, please create a support ticket in the DevExpress Support Center.