钛合金onClick参数

时间:2014-12-19 16:36:55

标签: view controller titanium titanium-alloy

首先:我正在练习钛,这只是我第一个对框架有信心的“Hello World”应用程序,所以任何建议都会受到高度赞赏。

我有这个简单的观点:

        <ScrollView id="grid" dataCollection="pictures">
            <View class="single-item" title="{title}" author="{author}" desc="{desc}" onClick="showPic">
                <ImageView class="thumb" image="/images/thumb-stock-1.jpg" />
                <Label class="title" text="{title} by {author}" />
                <Label class="desc" text="{desc}" />
            </View>
        </ScrollView>

单击每个项目,我调用我的控制器中定义的函数showPic(),这没关系。但我想将一些参数传递给该函数,即{title},{author}和{desc},以便我可以处理它们并在每个特定项目的新详细视图上“打印”它们。使用TableView很容易(我只是把:event.source - &gt; title,event.source - &gt; author ...在我的控制器里面,我可以读取那个表行数据),但我的看法似乎不起作用。

所以我的问题是: 1)如何从VIEW传递参数:到CONTROLLER showPic() 2)一般来说,如果有一个更好的视图列出一些对象并打开每个对象,只需告诉我如何以便我可以学到更多东西:D(PS:我不能使用tableView因为我的布局不适合这种观点)

----编辑:这是我的完整代码

INDEX.XML:

<Alloy>
    <Collection src="pictures"/>
    <NavigationWindow id="navGroupWin">
        <Window class="container" title="La mia galleria">
            <View class="arrow arrow-up"><Label text="UP" /></View>

            <ScrollView id="grid" dataCollection="pictures">
                <View class="single-item" title="{title}" author="{author}" desc="{desc}" onClick="showPic">
                    <ImageView class="thumb" image="/images/thumb-stock-1.jpg" />
                    <Label class="title" text="{title} by {author}" />
                    <Label class="desc" text="{desc}" />
                </View>
            </ScrollView>

            <View class="arrow arrow-down"><Label text="DOWN" /></View>

        </Window>
    </NavigationWindow>
</Alloy>
来自index.js的

showPic:

function showPic(event) {

    var pic = event.source;
    var args = {
        title: pic.title,
        desc: pic.desc,
        author: pic.author
    };
    var picView = Alloy.createController("detail", args).getView();

    if (OS_IOS) {$.navGroupWin.openWindow(picView);}
    if (OS_ANDROID) {picView.open();}

}

detail.xml:

<Alloy> 
    <Window class="container">
        <View layout='vertical'>
            <Label id="titleLabel"></Label>
            <Label id="descLabel"></Label> 
            <Label id="authorLabel"></Label>
        </View>
    </Window> 
</Alloy>

detail.js

var args = arguments[0] || {};
$.titleLabel.text = args.title || 'Default Title';
$.descLabel.text = args.desc || 'Default desc';
$.authorLabel.text = args.author || 'Default author';

当我点击索引的每个项目时,我的source.title,source.author和source.desc似乎是空的,在详细信息窗口中我只返回'默认'值

2 个答案:

答案 0 :(得分:0)

我不确定你是否可以在视图文件级别上执行此操作。

我要尝试的是将id分配给每个视图元素(这是一种通用技术),并在控制器文件中完全部署所有单击侦听器,从视图中删除所有onClick命令。

所以:

  1. 在视图中设置id="myview"class="single-item"

  2. 在您的控制器中尝试

    $.myview.addEventListener('click', function(e){ showPic(e.title, e.author, e.desc) });

答案 1 :(得分:0)

不确定它是否在其他地方出错,但是像它一样被剥离它起作用:

的index.html

<Alloy>

        <Window id="test">          
            <ScrollView id="grid" layout="vertical">
                <View class="single-item" width="250" height="250" backgroundColor="blue" title="title" author="author" desc="desc" onClick="showPic">                   
                </View>
                <View class="single-item" width="250" height="250" backgroundColor="red" title="red" author="red" desc="red" onClick="showPic">                   
                </View>
                <View class="single-item" width="250" height="250" backgroundColor="yellow" title="yellow" author="yellow" desc="yellow" onClick="showPic">                   
                </View>
                <View class="single-item" width="250" height="250" backgroundColor="green" title="green" author="green" desc="green" onClick="showPic">                   
                </View>
            </ScrollView>
        </Window>

</Alloy>

index.js

function showPic(event) {
    Ti.API.info(JSON.stringify(event.source));    
}

$.test.open();