2012-10-04 61 views
1

Im在requireJS中定義變量時遇到問題定義模塊時,它不會生效。我有以下(切開)的例子來說明該問題:RequireJS設置來自外部的模塊變量不會生效

以下是定義的模塊:

define([], function() { 
var testerString = "BaseLine"; 

var ShowTesterString = function() { 
    console.log(testerString); 
} 

var setTesterString = function (pTesterString) { 
    testerString = pTesterString; 
} 

return { 
    testerString: testerString, 
    ShowTesterString: ShowTesterString, 
    setTesterString: setTesterString 
}; 
}); 

我不是設置「TesterModule」作爲另一個的依賴,並運行的下面幾行代碼:

TesterModule.ShowTesterString(); 
TesterModule.testerString = "Change 1"; 
TesterModule.ShowTesterString(); 
TesterModule.setTesterString("Change in Setter"); 
TesterModule.ShowTesterString(); 

什麼被輸出到控制檯:

BaseLine 
BaseLine 
Change in Setter 

我禾ULD都認爲它應該是:

BaseLine 
Change 1 
Change in Setter 

似乎只是做變量=等等犯規採取任何的特效設置模塊中的一個變量,它似乎需要對模塊的方法中設置變量。任何人都可以向我解釋爲什麼這是?或者我編碼錯了?

在此先感謝

回答

2

據我所知,不是超級熟悉RequireJS,這是一個純粹的JavaScript問題。更改

console.log(testerString); 
// to 
console.log(this.testerString); 

,改變

testerString = pTesterString; 
// to 
this.testerString = pTesterString; 

讓你獲取/設置在由匿名函數返回,而不是關在var testerString變量對象的值。

define([], function() { 
    var foo = "BaseLine"; 

    var ShowTesterString = function() { 
     console.log(foo); 
    } 

    var setTesterString = function (pTesterString) { 
     foo = pTesterString; 
    } 

    return { 
     testerString: foo, 
     ShowTesterString: ShowTesterString, 
     setTesterString: setTesterString 
    }; 
}); 

而且,a matter of style,最好使用一個「正常」的函數聲明:

function ShowTesterString() { 
    ... 
} 
發生的事情在你的代碼目前可如果您使用的是從返回的對象鍵不同的變量名被澄清

比使用var ShowTesterString = function() { ... },如在你的代碼。

+0

嗨馬特,謝謝你的迴應。我改變了你所建議的佈局的定義功能,但它沒有改變。所以我想知道是否與RequireJS AMD風格有關。任何其他想法? – Matt

+0

您更改了代碼以使用'foo'?這只是一個例子來澄清_如果它不起作用,則不能解決問題。解決的辦法是在部分片段中使用'this.testerString'。 –

+0

對不起,讀過這篇文章。這個。解決了這個問題。 – Matt

相關問題