如何使用javascript填充windows8中的列表

时间:2013-02-22 14:26:02

标签: javascript windows-8

我正在尝试构建一个windows8应用程序,我使用SplitApp作为基础。只是尝试从AJAX添加数据但它失败了。

在data.js文件中我有:

(function () {

    var list = new WinJS.Binding.List();

    $.each(data(), function (key, item) {
        list.push(item);
    }); 

}
})();

在app.js文件中我有(这可以在应用中填充并填充列表)

function data() {

   var testGroupMeeting = [];
   var testMeeting = [];

   testGroupMeeting.push(new Group({ id: "1", title: "Group1" }));

   testMeeting.push(new Meeting({ group: testGroupMeeting[0], title: "Item Title: 1"       }));

   return testMeeting;


}

但是当我想使用AJAX来获取数据并在填充时返回testMeeting它会崩溃。

在app.js文件中我有(不能正常工作),但我需要让它工作

function data() {

   var testGroupMeeting = [];
   var testMeeting = [];

$.ajax({
    url: "/json/json.php",
    dataType: 'json',
    contentType: 'text/json',
    type: 'GET',
    success: function (data) {

           //Data here is correct and mapped to the arrays, its the same as in the abow example, i have the same data in the arrays as in the above example



        }
        return testMeeting;
    }

});


}

但问题似乎是AJAX不应该返回任何东西。而且我无法对data.js进行回调,因为您可以看到该函数是匿名的。

你会怎么做?

1 个答案:

答案 0 :(得分:0)

这不能以这种方式工作,因为$ .ajax函数是异步的:它执行ajax调用,然后,稍后使用适当的数据调用“success”函数。

您将重写$ .each(data()...以便不是调用data()并期望它返回testMeeting,而是调用数据并期望它使用testMetting对象调用回调。 / p>

类似的东西:

(function () {

    var list = new WinJS.Binding.List();

    getData(function (theMetting) {


        $.each(theMeeting, function (key, item) {
          list.push(item);
        }); 

 }
})();


// callback is a function that will be called with 
// something that is built from the server, after the ajax
// request is done
function getData(callback) {


 $.ajax({
    // ... everything you did ... 
    success: function (data) {

       // ... use the data to build the meeting object
       // and pass it to the callback
       callback(meeting)


    }
    return testMeeting;
}

});

}

同步代码(返回函数)和异步调用(执行某些操作,稍后使用结果调用回调)之间存在根本区别。 $ .ajax是典型的异步函数。

可以理论上将“async”标志传递给ajax,这样$ .ajax函数在Ajax调用完成之前不会返回,但是你可能不希望这样做它会阻止你的UI。

希望这有帮助。