2014-02-25 41 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

否則,你就需要等待,直到您的每一個異步的請求已經完成。