2013-07-30 73 views
1

我有類似於下面的代碼使用Dojo一些問題推遲: -this.watch沒有得到所謂的deferred.then()

這是XXX.js文件

dojo.declare('XXX', [dijit._Widget, dijit._Templated], { 

postCreate: function() { 
    //getting deferred from somewhere 
    var _this = this; 
    deferred.then(function(response) { 
     console.log("This is getting printed"); 
     _this.watch("value", function(A, B, C) { 
     console.log("This is not getting printed"); 
     var value = _this.get("value"); 
     _this.onValueChange(value); 
    }); 

} 

我把這個類形式的其他JS FLE與下面的代碼: -

this.object = new XXX({ 
        //some args 
       } 
dojo.connect(this.object, "onValueChange", function(value) { 
        console.log("I am here"); 
        this.onValueChange(value); 
}); 

當我使用相同的「看」不deferred.then,這是工作完全正常,但現在它不執行該功能時,我在形式上改變值。任何指針? 難道是因爲當我的「this.object」被創建時,延遲沒有執行「then」中的函數?

+0

'deferred.then'中的處理程序可能未被調用,您是否介意添加實際的延遲對象接受/拒絕標準的代碼? –

+0

我可以打印任何超過this.watch並延遲的內容。對不起,由於與我公司的隱私協議,將無法提供實際的代碼。但是,這段代碼是在postCreate()方法中,遵循如下的生命週期: - https://dojotoolkit.org/reference-guide/1.9/dijit/_WidgetBase.html#id5 – DexterMorgan

+0

然後創建一個簡化的案例,最好是一個小提琴。如果你沒有辦法,我們無法幫助你,因爲問題不在你上面​​發佈的代碼中,上面'.then'中的代碼不會根據你的名字被調用,這意味着延遲被拒絕。沒有延期接受代碼 - 沒有答案。 –

回答

0

手錶處理程序獨立於它們添加的上下文。他們只是掛在各自的狀態對象上。在上面的代碼中,手錶塊的末端大括號 - })缺失。也許,這是問題。請參閱下面一個簡單的例子:

<script type='text/javascript'> 
    dojo.require("dijit.form.TextBox"); 
    dojo.require("dojo._base.Deferred"); 
    dojo.require("dojo.ready"); 

    var def = null; 

    dojo.ready(function(){ 
     def = new dojo._base.Deferred(); 
     var _this = dijit.byId('namefield'); 
     def.then(function(resp) { 
      _this.watch("value",function(a,b,c) { 
      console.info(''+a+'-'+b+'-'+c); 
      }); 
     }); 
    }); 
    function func() { 
     if(def) { 
      def.resolve(true); 
      console.info('resolved'); 
     } 
    } 
</script> 
</head> 
<body class="claro"> 
    <input type="text" dojoType="dijit.form.TextBox" id="namefield" name="namefield"/> 
    <button onclick='func()'>click</button> 
</body> 

所以,看一個延遲迴調中添加時的處理程序也可使用。 此外,我看到「onValueChange」正在從「onValueChange」的事件處理程序中調用,該程序是遞歸的,並最終出現在stackoverflow錯誤中。另外,「this」運算符在「dojo.connect」中有不同的上下文。請注意這一點。