2014-02-13 59 views
1

我有一個JavaScript模塊在JavaScript dojo toolkit。但是我有使用這個關鍵字的問題。在函數中使用此關鍵字javascript dojo toolkit

define(["dojo/_base/declare","database/tool"], 
     function (declare, databaseTool) { 
      return declare(null, { 
       person: null, 
       spatialReference: null, 

       constructor: function (parameters) { 
        this.person = parameters.person;      
       }, 

       activatePerson: function() { 

        var db = new databaseTool(); 

        var personOptions = { 
         "isActivated": true 
        }; 

        var onActivated = function(result) { 
         var updatedPerson = result.person; 
         var oldPerson = this.person; //retuns <div id="person"/> 
        }; 

        db.update(personOptions, onActivated); 
       } 
      }); 
     }) 

我想通過這個關鍵字使用模塊的person objectonActivated方法。 但是this.person不返回javascript對象。它返回<div id="person...>

+1

看到這個問題(雙關意圖):http://stackoverflow.com/questions/3127429/javascript-this-keyword。 Dojo有一個'hitch'函數來處理這個問題:http://dojotoolkit.org/reference-guide/1.9/dojo/_base/lang.html#hitch – Frode

回答

2

Dojo有一個稱爲hitch()(來自dojo/_base/lang模塊)的功能。您的解決方案將是:

var onActivated = function(result) { 
    var updatedPerson = result.person; 
    var oldPerson = this.person; //retuns <div id="person"/> 
}; 

db.update(personOptions, lang.hitch(this, onActivated)); 

它接受兩個參數,第一個是作爲範圍this),第二個開始的功能的對象。

1
var context = this; 
var onActivated = function(result) { 
     var updatedPerson = result.person; 
     var oldPerson = context.person; 
}; 

嘗試這種方式。