winjs.xhr和winjs中的函数调用

时间:2013-02-26 09:08:41

标签: microsoft-metro windows-store-apps winjs

场景:我试图调用一个在json中返回结果的webservice,逻辑应该非常直接。

我在WinJS.xhr()中调用了一个webservice url,添加了一个then函数来处理结果,这里我试图将它绑定到一个列表。

我正在使用下面的内容,但我没有得到任何显示我在这里做错了什么?

有人可以告诉我如何从函数调用winjs.xhr()并返回一些我可以绑定的对象,因为我在下面尝试吗?

    function getData() {
        return WinJS.xhr({ url: "http://search.twitter.com/search.json?q=%23windows8&rpp=10" })
    }    
    function myFunc() {
        getData().then(function (xhr) {
            var jsondata = JSON.parse(xhr.responseText)
            return jsondata;
            // ...do something with the data when it arrives...
        }, function (err) {
            // ...do something with the error
        });
    }     

 var dataList = new WinJS.Binding.List(myFunc());

    //var dataList = new WinJS.Binding.List(dataArray);
    var publicMembers =
        {
            itemList: dataList
        };
    WinJS.Namespace.define("DataExample", publicMembers);

1 个答案:

答案 0 :(得分:3)

WinJS.Binding.List的ctor接受列表或数组作为列表的初始内容。您的myFunc()将不会返回任何内容。您可以使用

设置一个空列表
var dataList = new WinJS.Binding.List()

并按照您目前的方式导出。 然后,在位于myFunc()声明下方的dataList中,您只需将项目添加到列表中即可。例如,假设jsondata解析为数组:

function myFunc() {
    getData().then(function (xhr) {
        var jsondata = JSON.parse(xhr.responseText)
        jsondata.forEach(function(entry) { dataList.push(entry); });
    }, function (err) {
        // ...do something with the error
    });
}     

编辑:我还假设您已将dataList.dataSource绑定到itemDataSource的{​​{1}}并设置了匹配的WinJS.UI.ListView属性或渲染功能。