2014-07-09 22 views
0

我使用jQuery Deferred。當我點擊一個鏈接打開模態對話框時,我想做2件事情;使用jQuery推遲的問題

  1. 叫我的API
  2. 叫我的模板(其中從API值將得到填充)

所以我做了以下內容:

self.myModel = new myModel(); 
self.myModel.url = "api/myModel/"; 

self.scenarioRecInfoDeferred = new $.Deferred(); 
self.myModel.fetch({ 
     success : function(){ 
      myModelDeferred.resolve(); 
     } 
}); 


self.tmplDeferred = new $.Deferred(); 


$.when(self.myModelDeferred, self.tmplDeferred).done(function(modalTemplates) { 

}); 

require(['text!templates/mytemp/my-tpl.html'], function(modalTemplates) { 
    self.tmplDeferred.resolve(modalTemplates); 
}); 

現在我沒有收到內部

$.when(self.myModelDeferred, self.tmplDeferred).done(function(modalTemplates) {} 

爲 「modalTemplates」 任何事情我做得不對的accesinng /傳遞參數?

請建議。

+0

'self.scenarioRecInfoDeferred','myModelDeferred'和'self.myModelDeferred'有什麼區別? – Bergi

+0

什麼是「自我」?全局'window'對象? – Bergi

回答

-1

爲什麼在加載模板之前需要聲明延遲?

你可以做任何你需要做的內部需要模塊內的modalTemplates,只是跳過tmplDeferred使用。

require(['text!templates/mytemp/my-tpl.html'], function(modalTemplates) { 
    self.myModelDeferred.done(function(modalTemplates) { 

    }); 

}); 

無論如何,如果你想堅持這種結構,我不認爲這是將變量傳遞給延期的方式。您可以改爲將其分配爲self.tmplDeferred.modalTemplates=modalTemplates。所以,接下來應該工作

$.when(self.myModelDeferred, self.tmplDeferred).done(function(self.tmplDeferred.modalTemplates) { 

}); 

require(['text!templates/mytemp/my-tpl.html'], function(modalTemplates) { 
    self.tmplDeferred.modalTemplates=modalTemplates; 
    self.tmplDeferred.resolve(); 
}); 
2

我相信你需要在你的.done()功能操作機2點的參數。第一個參數將對應於myModelDeferred參數(這將是未定義的),第二個參數將對應於tmplDeferred參數。

我做了一個快速jsfiddle來測試自己。

var action1 = $.Deferred(); 
var action2 = $.Deferred(); 

setTimeout(function(){ 
    action1.resolve(); 
}, 1000); 

setTimeout(function(){ 
    action2.resolve("def", "ghi"); 
}, 500); 

$.when(action1.promise(), action2.promise()).done(function(args, args2){ 
    console.log(args); // undefined 
    console.log(args2); // ["def", "ghi"] 
}); 

DEMO

希望這有助於!