2

I need to display the Picker values from Database. So How can I display the dynamic values in picker.

XML code

       <Alloy>
    <Collection src="UserLanguage"/>
    <Window class="container" onClose="cleanup">

         <Picker class="picker">
                  <PickerColumn dataCollection="UserLanguage" dataTransform="transformFunction">
                       <PickerRow title="{LanguageName}"/>
                  </PickerColumn>
         </Picker>
        <!--<Label id="label"></Label>-->
    </Window>
</Alloy>

Model:

     var moment = require('alloy/moment');

exports.definition = {
    config : {
            "columns": {
            "id":"text",
            "LanguageName":"text"
            },
            "adapter": {
                "type": "sql",
                "collection_name": "UserLanguage"
            }
    },

    extendModel: function(Model) {      
        _.extend(Model.prototype, {

        });

        return Model;
    },

    extendCollection: function(Collection) {        
        _.extend(Collection.prototype, {

        });

        return Collection;
    }
};

Controller

var moment = require('alloy/moment');
var userlang = Alloy.Collections.UserLanguage;

var task = Alloy.createModel('UserLanguage', {
        id : '1',
        LanguageName : 'English'
    });
task.save();

userlang && userlang.fetch();

function transformFunction(model) {
    var transform = model.toJSON();
    transform.LanguageName = transform.LanguageName ;
    return transform;
}

$.index.open();

function cleanup() {
    $.destroy();
}

tss:

".container": {
    backgroundColor:"black"
},

".picker": {
    width: '90%',
    top: '25dp'
}

Alloy.js

Alloy.Collections.UserLanguage = Alloy.createCollection('UserLanguage');

How can I pass the selected values in to Picker. The data is not binding in to the XML file, I'm getting the following error,

Uncaught TypeError: cannot read property '_transform' of undefined enter image description here

Vinod
  • 2,263
  • 9
  • 55
  • 104

1 Answers1

2

index.xml

<Alloy>
   <Collection src="UserLanguage"/>

   <Window>
      <Picker id="countryPicker" class="picker">
         <PickerColumn id="column1" dataCollection="UserLanguage">
              <PickerRow title="{LanguageName}"/>
         </PickerColumn>
      </Picker>
  </Window>
</Alloy>

index.js

Alloy.Collections.UserLanguage.fetch();
$.index.open();

Don't forget to call $.destroy after window is closed. See http://docs.appcelerator.com/titanium/latest/#!/guide/Alloy_Data_Binding

Another solution:

index.xml

<Alloy>
   <Collection src="UserLanguage"/>

   <Window>
      <Picker id="picker"/>
  </Window>
</Alloy>

index.js

var userLanguage = Alloy.Collections.UserLanguage;

userLanguage.on("reset", function() {
   var column = Ti.UI.createPickerColumn();

   this.each(function(model) {
      var row = Ti.UI.createPickerRow({
         title: model.get("LanguageName");
      });

      column.addRow(row);
   });

   $.picker.columns = [column];
});

userLanguage.fetch();
$.index.open();
0101
  • 2,697
  • 4
  • 26
  • 34
  • Hello @0101, your first approach is very clever. Nonetheless I'm trying to retrieve the id of the seleccted item in the picker that is using data binding. I've tried this but didn't work: `alert($.picker.getSelectedRow(0).id);` Please help me – Juan Herrera Sep 10 '15 at 21:34
  • Hi @jdjuan I don't work with Titanium anymore so I can't help you sorry. – 0101 Sep 12 '15 at 10:39