オブジェクトに次のプロパティメソッドがあるとします。
onReady: function FlashUpload_onReady()
{
Alfresco.util.Ajax.jsonGet({
url: Alfresco.constants.PROXY_URI + "org/app/classification",
successCallback: {
fn: function (o) {
var classButtonMenu = [],
menuLabel, that = this;
var selectButtonClick = function (p_sType, p_aArgs, p_oItem) {
var sText = p_oItem.cfg.getProperty("text");
that.classificationSelectButton.set("label", sText);
};
for (var i in o.json.items) {
classButtonMenu.push({
text: o.json.items[i].classification,
value: o.json.items[i].filename,
onClick: {fn: selectButtonClick}
});
}
this.classificationSelectButton = new YAHOO.widget.Button({
id: this.id + "-appClassification",
type: "menu",
label: classButtonMenu[0].text,
name: "appClassification",
menu: classButtonMenu,
container: this.id + "-appClassificationSection-div"
});
},
scope: this
},
failureMessage: "Failed to retrieve classifications!"
});
アクセスするためではなく、selectButtonClick
参照する必要のある関数でそれを理解するのに少し推測作業が必要でしたが(そうでない場合は表示されます)、なぜ使用できないのかわかりません。私の推測では、コンストラクター関数が呼び出されると、オブジェクト全体のプロパティが何らかの形で参照されると、スコープが失われます。that
this
this.classificationSelectButton
undefined
this
new YAHOO.widget.Button
誰かが、単に `this.classificationSelectButton'を呼び出すのではなく、参照classificationSelectButton
する必要がある理由を説明してもらえますか?var that = this