ember-cli-auto-complete
Version:
ember-cli addon that provides type-ahead selection for text inputs
145 lines (111 loc) • 4.38 kB
Markdown
[![Build Status][]](https://travis-ci.org/toranb/ember-cli-auto-complete)
[][] addon that provides type-ahead selection for text inputs (requires ember.js 1.11+)
## Demo
http://emberjs.jsbin.com/hohegogizi/1/
## Installation
```
npm install ember-cli-auto-complete --save-dev
```
## How to use this component
First add a custom component that extends AutoComplete. In this component you need to add 2 computed properties and 1 string variable.
```
1) suggestions: this computed will determine how the list of options is filtered as the user enters text
2) optionsToMatch: this computed will determine if the value entered is valid (when the user omits to click/enter/tab the selection)
3) valueProperty: this string should be the value property for the options passed in (think selectbox value/label)
```
```js
import AutoComplete from "ember-cli-auto-complete/components/auto-complete";
export default AutoComplete.extend({
valueProperty: "code",
suggestions: function() {
var inputVal = this.get("inputVal") || "";
return this.get("options").filter(function(item) {
return item.get("code").toLowerCase().indexOf(inputVal.toLowerCase()) > -1;
});
}.property("inputVal", "options.@each"),
optionsToMatch: function() {
var caseInsensitiveOptions = [];
this.get("options").forEach(function(item) {
var value = item.get("code");
caseInsensitiveOptions.push(value);
caseInsensitiveOptions.push(value.toLowerCase());
});
return caseInsensitiveOptions;
}.property("options.@each")
});
```
Next add the component to your template including a block with html for the options (requires ember 1.11)
```js
{{
<p><b>{{result.code}}</b>{{result.text}}</p>
{{/my-auto-complete}}
```
Finally prepare a list of options for the component in the route or controller
```js
var Foo = Ember.Object.extend({});
var Bar = Ember.Object.extend({code: ""});
export default Ember.Route.extend({
model: function() {
var codes = [];
codes.pushObject(Foo.create({code: "ABC", text: "SOMETHING 1"}));
codes.pushObject(Foo.create({code: "ABCD", text: "SOMETHING 2"}));
codes.pushObject(Foo.create({code: "ABCDE", text: "SOMETHING 3"}));
return Ember.RSVP.hash({
model: Bar.create(),
codes: codes
});
},
setupController: function(controller, hash) {
controller.set("model", hash.model);
controller.set("codes", hash.codes);
}
});
```
If you would like to call an action every time an elements is
selected just bind the action through the attribute `selectItem`.
```js
{{
options=codes
selectedValue=model.code
placeHolderText="Find a thing"
inputClass="my-fun-input-thing andTwo"
noMesssagePlaceHolderText="No things are found"
selectItem="itemSelected" as |result|}}
<p><b>{{result.code}}</b>{{result.text}}</p>
{{/my-auto-complete}}
<p class="selection">{{controller.selection}}</p>
```
In the example above the action `itemSelected` will be called with the
selected `item`, bubbling through your routes and controllers.
```js
actions: {
itemSelected: function(item) {
this.get('controller').set('selection', item.get('code'));
}
}
```
npm install
bower install
ember test
```
1) npm install
2) bower install
3) ember server
4) localhost:4200
```
First I'd like to thank [Nick Christus] for the design work that made this great component happen to begin with. Next I'd like to thank [Charlie] for his amazing project [ember-cli-suggest] as this project truly represents a fork of his work.
Copyright © 2015 Toran Billups http://toranbillups.com
Licensed under the MIT License
[]: https://travis-ci.org/toranb/ember-cli-auto-complete.svg?branch=master
[]: http://www.ember-cli.com/
[]: http://emberjs.com/
[]: https://github.com/nchristus
[]: https://github.com/klclee
[]: https://github.com/klclee/ember-cli-suggest