想要从Appcelerator云中的数据中指定tableView的每一行

时间:2014-07-04 09:03:43

标签: javascript android titanium tableview appcelerator

我正在使用带有钛/ 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();
            });

1 个答案:

答案 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之类的辅助函数是一种非常有用的模式。我建议您在项目中尝试这一点,看看您的问题是否仍然存在。我希望它不会! :)