0

我想在我的 WinJS.UI.ListView 中列出我所有的 Twitter 关注者。

        WinJS.xhr({
            url: "https://api.twitter.com/1/followers/ids.json?cursor=-1&screen_name=" + twitterusername,
            responseType: "json"
        }).then(
                function (xhr) {
                    var json = JSON.parse(xhr.responseText);
                    var a = [];
                    a = json.ids;
                    //
                    // now what next?
                    //
                },
                function (error) {
                    myListView.textContent = error;
                }
            );

我得到了我所有的 twitter 粉丝 id json.ids。但接下来如何找到他们的屏幕名称和头像以及如何将它们与我的 ListView 控件绑定的主要内容。因为我已经将简单的静态数据绑定到 ListView 但对于这个例子我不知道。

4

1 回答 1

0

您必须为每个 id 再次调用api.twitter.com/1/users/show.json?user_id=json.ids[i].

收到所有回调后,您必须创建一个包含具有标题、文本和图片属性的对象的数组。之后只需将其与您的列表绑定即可。

以下代码是一个示例(未经测试,不知道它是否可以正常工作,但它应该为您指明正确的方向)

var followersCallback = function(xhr){

          var json = JSON.parse(xhr.responseText);
          var promises = [];

          // make promises for each user id (call to twitter to get picture/name/description)
          for (var i = 0; i < json.ids.length; i++){

            var promise = WinJS.xhr({
                url: "https://api.twitter.com/1/users/show.json?user_id=" + json.ids[i],
                responseType: "json"
            });

            promises.push(promise);

        }

        var dataArray = [];

        // join those promises
        WinJs.Promise.join(promises)
                     .then(function(args){
                        //when you get callback from all those promises
                        for (var j = 0; j < args.length; j++){

                            //not sure if parse is needed
                            args[j]=JSON.parse(args[j].responseText);

                            //populate your data array
                            var obj = {};
                            obj.title = args[j].name;
                            obj.picture = args[j].profile_image_url;
                            obj.text = args[j].description;
                            dataArray.push(obj);
                        }
                        //bind your data to the list
                        var dataList = new WinJS.Binding.List(dataArray);

                     });
    };

    WinJS.xhr({
                url: "https://api.twitter.com/1/followers/ids.json?cursor=-1&screen_name=" + twitterusername,
                responseType: "json"
            }).then(
                    followersCallback,
                    function (error) {
                        myListView.textContent = error;
                    }
            );
于 2013-04-19T09:26:37.153 回答