2

中数据标记为Picker的问题我需要显示来自数据库的Picker值。那么如何在picker中显示动态值。在钛合金

XML代码

 <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> 

型号:

 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; 
    } 
}; 

控制器

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'); 

我怎么能传递到选择器选择的值。该数据不绑定到XML文件中,我发现了以下错误,

遗漏的类型错误:未定义 enter image description here

回答

2

INDEX.XML无法读取属性“_transform”

<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(); 

窗口关闭后,请不要忘记拨打$.destroy。见http://docs.appcelerator.com/titanium/latest/#!/guide/Alloy_Data_Binding

另一种解决方案:

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(); 
+0

你好@ 0101,你的第一个做法是非常聪明的。尽管如此,我试图检索使用数据绑定的选择器中选择的项目的ID。我试过,但没有工作:($ picker.getSelectedRow(0).ID) '警报;' 请帮我 – 2015-09-10 21:34:48

+0

嗨@jdjuan我不钛工作了,所以我可以帮你对不起。 – 0101 2015-09-12 10:39:13