2014-01-08 64 views
1

我寫在道場1.9自定義模塊和我有這樣一段代碼用來聲明它:道場 - Json的REST調用自定義模塊構造器

define(["dojo/_base/declare", "dojo/store/JsonRest"], function(declare, JsonRest){ 
    return declare(null, { 
     user: 'Not set', 
     constructor: function(id){ 
      var store = new JsonRest({ 
       target: "myurl" 
      }); 
      store.get('user').then(function(item){ 
       console.log(item.user); 
       this.user = item.user; 
      }); 
     }, 
     getUser: function(){ 
      return this.user; 
     } 
    }); 
});

在另一個文件中我使用此代碼:

require(["modules/demo/demo"], function(demo){ 
     var x = new demo('7'); 
     alert(x.getUser()); 


    }); 

我明白我的問題:的getUser()的JSON/REST調用完成之前,所以這個功能

函數被調用

總是返回「未設置」,因爲json值仍未加載。我怎樣才能讓getUser函數等待呢?

PS:我敢肯定,JSON REST請求效果很好,因爲控制檯日誌確定...提前

感謝

回答

0

這就是阿賈克斯的性質:)

一方法就是利用store.get()返回的dojo/Deferred對象。

define([ 
    "dojo/_base/declare", 
    "dojo/_base/lang", 
    "dojo/store/JsonRest" 
], function(
    declare, 
    lang, 
    JsonRest 
){ 
    return declare(null, { 
     user: 'Not set', 
     _initialized: null, 
     constructor: function(id){ 
      var store = new JsonRest({ 
       target: "myurl" 
      }); 
      this._initialized = store.get('user'); 

      this._initialized.then(lang.hitch(this, function(item){ 
       console.log(item.user); 
       this.user = item.user; 
      })); 
     }, 
     initialize: function() { 
      return this._initialized; 
     }, 
     getUser: function(){ 
      return this.user; 
     } 
    }); 
}); 
.... 

require(["modules/demo/demo"], function(demo){ 
    var x = new demo('7'); 
    x.initialize().then(function() { 
     alert(x.getUser()); 
    }); 
}); 

實施例:http://fiddle.jshell.net/6mgwh/

+0

對不起。我試過你的代碼,但它似乎並沒有工作。 – michaelramin

+0

@michaelramin啊,我沒有測試它,它可能不起作用,因爲構造函數中的回調沒有在正確的範圍內運行。更新了答案,並添加了小提琴。 – Frode

+0

非常感謝你,它現在的作品:) – michaelramin