我正在使用带有钛/ appcelerator云服务的PC开发Android应用程序。
我想拥有facebook的新闻源页面,其中列出了用户的帖子。
我已经设法用tableView执行此操作,每行显示服务器上的每个帖子。
问题是我不知何故无法获得个人用户; s照片和(每个帖子都有按钮)如果我clikc这个按钮,它不会给我该特定用户的用户信息但是用户的第一篇文章。
例如,如果user1,user2,user3各发布一个, 列表页面分别显示post1,post2,post3。 如果我点击post2的按钮(发送消息按钮),它会尝试将其发送给user1而不是user2。
这是我的代码。
最近2天被困了, 谢谢!
profileimage是照片的变量 shopping是消息发送按钮的变量
win.addEventListener('open', function () {
Cloud.Posts.query({
page: 1,
per_page: 20,
order: "-created_at"
}, function (e) {
if (e.success) {
status.hide();
var tbl_data = [];
for (var i = 0; i < e.posts.length; i++) {
var post = e.posts[i];
-- there are some code here ---
var profileimage = Ti.UI.createView({
backgroundImage: post.user.photo.urls.medium_500,
backgroundColor: '#fffff',
width: 90,
height: 90,
borderRadius: 22,
top:20, left: 10
});
var shopping = Ti.UI.createView({
backgroundImage: 'shopping.png',
width: 35,
height: 35,
top: 70,
right: 10
});
shopping.addEventListener('click', function(){
//alert(post);
var tradewin,tradeinc;
tradeinc = require('trade');
tradewin = new tradeinc.trade1(post);
tradewin.open();
});
答案 0 :(得分:0)
好像您的问题源于为shopping
循环中的所有for
视图添加click事件侦听器。当由于用户操作而实际调用shopping
点击功能时,它会访问post
的最新值,最终将是post
的值for
循环:e.posts[e.post.length - 1]
。我已修改您的代码以缓解此问题:
win.addEventListener('open', function () {
Cloud.Posts.query({
page: 1,
per_page: 20,
order: "-created_at"
}, function (e) {
if (e.success) {
status.hide();
var tbl_data = [];
for (var i = 0; i < e.posts.length; i++) {
var post = e.posts[i];
-- there are some code here ---
var profileimage = Ti.UI.createView({
backgroundImage: post.user.photo.urls.medium_500,
backgroundColor: '#fffff',
width: 90,
height: 90,
borderRadius: 22,
top:20, left: 10
});
var shopping = Ti.UI.createView({
backgroundImage: 'shopping.png',
width: 35,
height: 35,
top: 70,
right: 10
});
// This wrapper function returns a callback function
// for your click event that also maintains the correct
// value of `post`
function getShoppingClickCallback(associatedPost) {
return function () {
var tradewin, tradeinc;
tradeinc = require('trade');
tradewin = new tradeinc.trade1(associatedPost);
tradewin.open();
};
}
// This line calls the `getShoppingClickCallback` function and
// passes the associated `post` object. The returned value of
// `getShoppingClickCallback` is a callback function.
shopping.addEventListener('click', getShoppingClickCallback(post));
在getShoppingClickCallback
循环中添加事件侦听器时使用for
之类的辅助函数是一种非常有用的模式。我建议您在项目中尝试这一点,看看您的问题是否仍然存在。我希望它不会! :)