钛集合显示

时间:2016-07-18 15:35:39

标签: titanium appcelerator appcelerator-titanium appcelerator-alloy

我有两个关于钛系列的问题:

这是我的控制器:

var products = Alloy.Collections.products;
products.fetch({
    success:function(_m,_r){
        var size = Alloy.Globals.half,
        width = size;
        for(var i = 1; i<=_resultats.length; i++){
            width = i%2 == 0 ? size : size-1; 
            backgroundColor = i%4 == 2 || i%4 == 3 ? Alloy.CFG.colors.lightgrey : "white";
            $.item.width = width;
    }

});

这是我的观点:

<ScrollView dataCollection="products" dataTransform="parse_liste" layout='vertical' id="products"> 
    <View id='item'>
        <Label text='{itemName}' />
        <ImageView image='images/star.png' id='rating' />
        <ImageView image='images/star.png' id='rating' />
        <ImageView image='images/star.png' id='rating' />
        <ImageView image='images/star.png' id='rating' />
    </View>
</ScrollView>

所有项目都显示良好,但我有以下错误:

[ERROR] :  Script Error {
[ERROR] :      column = 25;
[ERROR] :      line = 269;
[ERROR] :      message = "undefined is not an object (evaluating '$.item.width = width')";
[ERROR] :      stack = "success\nsuccess\n\nonLoad\nonload";
[ERROR] :  }

其次如何从项目评级中循环评级图像?,我可以在合金标签内部进行一种循环吗?

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

我认为你错过了一个近距离支撑。

但除此之外,你可以像这样设置宽度,不需要创建那两个变量(宽度和大小)

var products = Alloy.Collections.products;
products.fetch({
    success:function(_m,_r) {
        for(var i = 1; i<=_resultats.length; i++) {
            backgroundColor = i%4 == 2 || i%4 == 3 ? Alloy.CFG.colors.lightgrey : "white";
            $.item.width = !parseInt(i%2) ? Alloy.Globals.half : Alloy.Globals.half-1;
        }
    }
});

答案 1 :(得分:0)

首先,您尝试使用ScrollView进行集合数据绑定,我不确定这是否可以开箱即用。

只需使用普通的javascript即可。如果要保留项目对象,可以将其放在单独的控制器中并传递适当的数据。从scrollview的主体中删除xml。

var products = Alloy.Collections.products;
products.fetch({
    success:function(_m,_r) {
            var models = _m.models;
            models.forEach(function(model){
                // In the for loop create an item controller and pass model data
                var modelData = model.toJSON();
                Ti.API.info(JSON.stringify(modelData));
                var item = Alloy.createController('item', modelData) //pass here data for each model
                $.products.add(item.getView());
            }
        }
    }
});