|
|
- /**
- _onyx.FlyweightPicker_, a subkind of <a href="#onyx.Picker">onyx.Picker</a>,
- is a picker that employs the flyweight pattern. It is used to display a
- large list of selectable items. As with
- <a href="#enyo.FlyweightRepeater">enyo.FlyweightRepeater</a>,
- the _onSetupItem_ event allows for customization of item rendering.
-
- To initialize the FlyweightPicker to a particular value, call _setSelected_
- with the index of the item you wish to select, and call _setContent_ with
- the item that should be shown in the activator button.
-
- FlyweightPicker will send an _onSelect_ event with a selected item's
- information. This can be received by a client application to determine which
- item was selected.
-
- enyo.kind({
- handlers: {
- onSelect: "itemSelected"
- },
- components: [
- {kind: "onyx.PickerDecorator", components: [
- {},
- {name: "yearPicker", kind: "onyx.FlyweightPicker", count: 200,
- onSetupItem: "setupYear", components: [
- {name: "year"}
- ]
- }
- ]}
- ],
- create: function() {
- var d = new Date();
- var y = d.getYear();
- this.$.yearPicker.setSelected(y);
- this.$.year.setContent(1900+y);
- },
- setupYear: function(inSender, inEvent) {
- this.$.year.setContent(1900+inEvent.index);
- },
- itemSelected: function(inSender, inEvent) {
- enyo.log("Picker Item Selected: " + inEvent.selected.content);
- }
- })
- */
- enyo.kind({
- name: "onyx.FlyweightPicker",
- kind: "onyx.Picker",
- classes: "onyx-flyweight-picker",
- published: {
- //* How many rows to render
- count: 0
- },
- events: {
- //* Sends the row index, and the row control, for decoration.
- onSetupItem: "",
- onSelect: ""
- },
- handlers: {
- onSelect: "itemSelect"
- },
- components: [
- {name: "scroller", kind: "enyo.Scroller", strategyKind: "TouchScrollStrategy", components: [
- {name: "client", kind: "FlyweightRepeater", ontap: "itemTap"}
- ]}
- ],
- scrollerName: "scroller",
- create: function() {
- this.inherited(arguments);
- this.countChanged();
- },
- rendered: function() {
- this.inherited(arguments);
- this.selectedChanged();
- },
- scrollToSelected: function() {
- var n = this.$.client.fetchRowNode(this.selected);
- this.getScroller().scrollToNode(n, !this.menuUp);
- },
- countChanged: function() {
- this.$.client.count = this.count;
- },
- processActivatedItem: function(inItem) {
- this.item = inItem;
- },
- selectedChanged: function(inOld) {
- if (!this.item) {
- return;
- }
- if (inOld !== undefined) {
- this.item.removeClass("selected");
- this.$.client.renderRow(inOld);
- }
- this.item.addClass("selected");
- this.$.client.renderRow(this.selected);
- // need to remove the class from control to make sure it won't apply to other rows
- this.item.removeClass("selected");
- var n = this.$.client.fetchRowNode(this.selected);
- this.doChange({selected: this.selected, content: n && n.textContent || this.item.content});
- },
- itemTap: function(inSender, inEvent) {
- this.setSelected(inEvent.rowIndex);
- //Send the select event that we want the client to receive.
- this.doSelect({selected: this.item, content: this.item.content})
- },
- itemSelect: function(inSender, inEvent) {
- //Block all select events that aren't coming from this control. This is to prevent select events from MenuItems since they won't have the correct value in a Flyweight context.
- if (inEvent.originator != this) {
- return true;
- }
- }
- });
|