首先:我正在练习钛,这只是我第一个对框架有信心的“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似乎是空的,在详细信息窗口中我只返回'默认'值
答案 0 :(得分:0)
我不确定你是否可以在视图文件级别上执行此操作。
我要尝试的是将id分配给每个视图元素(这是一种通用技术),并在控制器文件中完全部署所有单击侦听器,从视图中删除所有onClick命令。
所以:
在视图中设置id="myview"
和class="single-item"
在您的控制器中尝试
$.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();