🔧
JSOM の executeQueryAsync で使われている Function.createDelegate について
JSOM のサンプルを見ると当たり前のように使われている Function.createDelegate
について。
引数に this
を渡しているのでだいたい想像がつきますが、JavaScript の this
の面倒なところを解決してくれるんですね。
<asp:Content ContentPlaceHolderID="PlaceHolderMain" runat="server">
<script type="text/javascript">
var obj = {
web: null,
retrieveTitle: function () {
var ctx = SP.ClientContext.get_current();
this.web = ctx.get_web();
ctx.load(this.web);
ctx.executeQueryAsync(this.onSuccess); // NG
ctx.executeQueryAsync(Function.createDelegate(this, this.onSuccess)); // OK
},
onSuccess: function () {
alert(this.web.get_title());
}
};
SP.SOD.executeFunc("sp.js", "SP.ClientContext", function () {
obj.retrieveTitle();
});
</script>
</asp:Content>
ちなみに Function.createDelegate
は MicrosoftAjax.js
に定義されています。
Discussion