からめもぶろぐ。

SharePoint が得意なフレンズなんだね!すごーい!

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 に定義されています。

データ取得の概要
Function.createDelegate 関数