2014-02-25 101 views
0

我正在使用CoffeeScript构建一个简单的自制JavaScript框架。通过Ajax获取价值回报,无需调用回调

在我的模型类,我有一个获取方法是如下:

fetch : (historyState, callback) -> 
    NProgress.start() 
    $.get historyState.hash, (data) -> 
    (data || data = {}) 
    data = JSON.parse data 
    if data.success 
     return callback data 
    .fail (response) -> 
    if response.statusText == 'Forbidden' 
     window.location.replace '/login' 
    .always -> 
    NProgress.done() 

然后在我的控制器视图的方法,我可以用它:

view : (id) -> 
    state = History.getState() 
    model.fetch state, (data) -> 
    $('.js-include').html(controller.render 'items/show', data) 

这工作比罚款但是,我想知道如何将多个数据发送到视图?

理想的做法是这样的:

view : (id) -> 
    state = History.getState() 
    items = model.fetch state 
    categories = model.fetch '/api/url/categories' 

    $('.js-include').html(controller.render 'items/show', { items : data, categories : categories }) 

现在,我无法从获取方法获取数据了我的回调所以我有点卡住。

回答

0

jQuery返回一个承诺,当您调用$ .get时,jQuery将履行诺言,当服务器响应异步时。

可以调用jQuery的这个样子,如果你想响应同步:

response = $.ajax(
    url: "..." 
    async: false 
).response 

这里是jQuery的文档AJAX:https://api.jquery.com/jQuery.ajax/#jQuery-ajax-settings

否则,你就需要等待,直到您的每一个异步的请求已经完成。