如何在WinJS.UI.ListView中列出我的Twitter粉丝列表

时间:2013-04-19 04:54:46

标签: javascript windows-8 winjs

我想在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;
                }
            );

我通过json.ids获取我的所有推特文件夹ID。 但接下来如何找到他们的屏幕名称和prifile图片和主要的东西如何绑定他们与我的ListView控件。我已将简单的静态数据绑定到ListView中,但对于此示例我不知道。

1 个答案:

答案 0 :(得分:0)

您必须再次呼叫api.twitter.com/1/users/show.json?user_id=json.ids[i]的每个ID。

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

以下代码是一个例子(未经过测试,不知道它是否有效,但它应该指向正确的方向)

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;
                    }
            );