kooh-q-hook

いわゆる一つの技術メモ

jQuery.when でも 配列を引数に取りたい

Promise.all みたいに!

でも jQuery.when の引数は一つまたはそれ以上のDeferredオブジェクト。
引数はカンマ区切りで指定されるものであって、配列ではない……。

というのは、Function.prototype.call と Function.prototype.apply の関係に似ています。
apply は配列形式の引数を用いて関数を呼び出すメソッドです。これを使います。

$.when.apply($, deferredArray);

使ってみる

var dataArray = [1,2,3];

var deferredArray = dataArray.map(function produceNewArray (data) {
  return $.post(url, data, success, dataType);
});

$.when.apply($, deferredArray).then(function doneFilter () {
  // resolved
}, function failFilter () {
  // failed
});

やりやがりましたね!

SharePoint 2013用のTypeScript型定義ファイル

sharepoint.TypeScript.DefinitelyTyped があるのでこれを使いましょう。
しかもNuGetからGetできる。ありがたいことです。

www.nuget.org

なにせMSのリファレンスは複雑怪奇迷宮と化してるので、
拠り所にしていると毎回目的の情報を得るだけで時間が吸い取られてしまいます。

JSOMである程度凝ったものを作るなら、
Visual Studio + TypeScript (+型定義ファイル) が望ましいと思います。

SharePoint2013用の言語パック適用時の補足

SharePoint 2013 で多言語サイトを提供する場合、
その選択肢の一つに言語パックのインストールというのがあります。

SharePoint 2013 用の言語パックをインストールまたはアンインストールする

概要

  • 複数の言語パックを適用する場合、その数だけダウンロードする必要がある
  • Web サーバーとアプリケーション サーバーにインストールする必要がある
  • 言語パックのインストール後にはSharePoint 製品構成ウィザードを実行する必要がある

具体例

Web サーバーとアプリケーション サーバーが一台ずつあり、
二つの言語パックをインストールする場合は以下のようになります。

  1. Web サーバーとアプリケーション サーバーそれぞれに二つの言語パックをインストールする
  2. いずれかのサーバーで SharePoint 製品構成ウィザードを実行する

失敗するケース

改めて書いてみると至極当然の手順ですが、
検証環境で初めて導入した時は勘違いをしていました。

「サーバーに言語パックをインストール → 構成ウィザードを実行」のセットを
Web サーバーとアプリケーション サーバーそれぞれでやろうとしてエラー。

これは構成ウィザードの実行時点でファーム内の全てのサーバーに
対象の言語パックがインストールされている必要がある為です。

おまけ

ちなみに複数の言語パック(A,B)を導入する場合は、
先にそれらを全サーバーにインストールした方が良いです。

「Aをインストール→構成→Bをインストール→構成」とすることも可能ですが、
何度も構成ウィザードを実行する理由はあまりないでしょう。