mozilla

Revision 121123 of View Controller

  • リビジョンの URL スラグ: Places/View_Controller
  • リビジョンのタイトル: View Controller
  • リビジョンの ID: 121123
  • 作成日:
  • 作成者: saneyuki
  • 現行リビジョン いいえ
  • コメント 対応作業完了; 95 words added, 376 words removed

このリビジョンの内容

{{ draft() }}

{{ Firefox3() }}

コントローラはPlaces model-view-controller 設計におけるコンポーネントの1つです。コントローラは有効化、無効化を受け取り、Places viewの状態を元にコマンドを実行します。

Placesは組み込み済みのコントローラを提供していますが、異なった目的のコントローラはアプリケーション中で使われており、Placesに特有のものではありません。一般的なコントローラの情報については、XULチュートリアル内のCommandsおよびUpdating Commandsのページを参照してください。

The built-in controller

PlacesではPlacesControllerという組み込みコントローラが提供されており、{{ Source("browser/components/places/content/controller.js") }}にてプロトタイプが定義されています。組み込みPlacesビューではPlacesController自動的にが使われるので、組み込みビューを使用する場合、コントローラを新たに書き起こす必要はありません。しかしながら、XUL文書内にPlacesControllerのソースを含める必要があります。ソースを含めるのには、{{ source("browser/components/places/content/placesOverlay.xul") }}をオーバーレイするのが推奨されます。このファイルは、組み込みPlacesコンテクストメニューとXUL commandsetを含みます。詳しくは、Displaying Places information using viewsを参照してください。

PlacesControllerでサポートされている全てのコマンドをあなたのカスタムビューがサポートしており、また、PlacesControllerのコマンドしかサポートしていないのであれば、PlacesControllerをそのまま使うこともできます。もしあなたのビューが、これらのコマンドのサブセットだけをサポートしているのならば、PlacesControllerの長所のみを使用できるかもしれません。後述のCreating custom controllersを参照してください。

Places commands

PlacesController がサポートしているコマンド及びその詳細が下記に一覧されています。

コマンドの多くが、コントローラのビューにおいて現在選択されているノードを操作します。ただし注記しておきます。ビューの{{ Interface("nsIPlacesView") }}インターフェイスのselectedNode プロパティを読み取ることによって選択されたノードは発見されます。selectedNode プロパティではビューはひとつのノードしか選択しないと仮定されているので、selectedNode プロパティに依存するコマンドもまた、ビューがひとつのノードしか選択していないと仮定しており、ビューが複数のノードを選択している場合にはコマンドは動作しません。

いくつかのコマンドはコントローラのビューの結果に新規ノードを追加します。結果としてノードが挿入される位置は、ビューの{{ Interface("nsIPlacesView") }}インターフェイスの{{ Interface("nsIPlacesView") }}プロパティで定義された位置となります。

placesCmd_deleteDataHost {{ fx_minversion_inline("3") }}
{{ Interface-method("nsIPrivateBrowsingService", "removeDataFromDomain") }}.を呼び出すことによって、選択されたノードのドメインについての全てのデータを削除します。
placesCmd_moveBookmarks
選択されたノードを別のフォルダに移動させるのに使われるUIが表示されます。先述の1つのノードの選択に関する注記は適用されません。このコマンドはビューのnsIPlacesView.getSelectionNodes()を呼び出します。
placesCmd_new:bookmark
PlacesUIUtils.showAddBookmarkUI()を呼び出すことによって、新規ブックマークを追加する際に使われるUIを表示します。新規ブックマークはビューの挿入位置に挿入されます。もし挿入位置が存在しない場合は、NS_ERROR_NOT_AVAILABLEが投げられます。
placesCmd_new:folder
PlacesUIUtils.showAddFolderUI()を呼び出すことによって、新規フォルダを追加する際に使われるUIを表示します。新規フォルダはビューの挿入位置に挿入されます。もし挿入位置が存在しない場合は、NS_ERROR_NOT_AVAILABLEが投げられます。
placesCmd_new:livemark
PlacesUIUtils.showAddLivemarkUI().を呼び出すことによって、新規ライブブックマークを追加する際に使われるUIを表示します。新規ライブブックマークはビューの挿入位置に挿入されま す。もし挿入位置が存在しない場合は、NS_ERROR_NOT_AVAILABLEが投げられます。
placesCmd_new:separator
ビューの現在の挿入位置に新規セパレータが追加されます。もし挿入位置が存在しない場合は、NS_ERROR_NOT_AVAILABLEが投げられます。
placesCmd_open
PlacesUIUtils.openNodeIn()を呼び出し、現在のタブに、ビューで選択しているノードを開きます。
placesCmd_open:tab
PlacesUIUtils.openNodeIn()を呼び出し、新規タブに、ビューで選択しているノードを開きます。
placesCmd_open:window
PlacesUIUtils.openNodeIn()を呼び出し、新規ウィンドウに、ビューで選択しているノードを開きます。
placesCmd_reload
{{ Interface-method("nsILivemarkService", "reloadLivemarkFolder") }}を呼び出し、ビューで選択されているノードがライブブックマークであれば、再読み込みをします。
placesCmd_reloadMicrosummary
{{ Interface-method("nsIMicrosummaryService", "refreshMicrosummary") }}を呼び出し、ビューで選択されているノードがmicrosummaryであれば、再読み込みをします。
placesCmd_show:info
PlacesUIUtils.showItemProperties()を呼び出し、ビューで選択されているノードのプロパティ編集UIを表示します。
placesCmd_sortBy:name
{{ Interface-method("nsIPlacesTransactionsService", "sortFolderByName") }}を呼び出し、選択されているノードがフォルダであれば、フォルダ内のソートを行います。

PlacesController はまた、標準の編集コマンドをサポートしています。

cmd_copy
ビューで選択されているノードをクリップボードにコピーします。先述の1つのノードの選択に関する注記は適用されません。このコマンドはビューの{{ Interface-method("nsIPlacesView", "getSelectionNodes") }}を 呼び出します。
cmd_cut
ビューで選択されているノードをクリップボードにコピーし、ノードを削除します。このコマンドの実装は、コピーに続けて削除を行う単純なものです。
cmd_delete
ビューで選択されているノードを削除します。 このコマンドはビューの{{ Interface-method("nsIPlacesView", "getRemovableSelectionNodes") }}を呼び出します。
cmd_paste
ビューの結果の現在の挿入位置にクリップボードのノードを追加します。もし挿入位置が存在しない場合は、NS_ERROR_NOT_AVAILABLEが投げられます。
cmd_redo
PlacesUIUtilsで保持された{{ Interface("nsIPlacesTransactionsService") }}インスタンスの{{ Interface-method("nsITransactionManager", "redoTransaction") }}を呼び出して、最後のPlacesトランザクションをredoします。
cmd_selectAll
ビューの{{ Interface-method("nsIPlacesView", "selectAll") }}を呼び出し、ビュー中の全てのノードを選択します。
cmd_undo
PlacesUIUtilsで保持された{{ Interface("nsIPlacesTransactionsService") }}インスタンスの{{ Interface-method("nsITransactionManager", "undoTransaction") }}を呼び出して、最後のPlacesトランザクションをundoします。

Creating custom controllers

PlacesController がサポートしていないコマンドを使いたい場合、またはPlacesController ではない方法でコマンドを制御したい場合、あなた自身によりコントローラを記述する必要があります。さもなくば、カスタムビューも記述している場合は、カスタムビューを使用しているとしても、PlacesControllerをそのまま使用することとなります。コントローラに慣れていない場合は、XULチュートリアル内の Commands 及び Updating Commandsを参照してください。

組み込みビューのためのコントローラを自ら記述しているのならば、ビューが自動的にPlacesControllerのインスタンスである標準のコントローラを接続するという事実の利点を使うことができます。あなたのカスタムビューは、PlacesControllerがサポートしていようがしていまいが、オーバーライドを望む方法でコマンドをサポートする必要があります。他のすべてのコマンドは、ビュー標準のコントローラによって制御されます。あなたのコントローラが標準のものを上書きするのを保証するため、ビュー内のコントローラの一覧において、標準コントローラを前に持ってくるべきです。(なぜこうするべきか納得できない場合は、前段にリンクがあるチュートリアルを参照してください)
ビューは単純に標準コントローラを最後に配置します。そのため、{{ Interface-method("nsIControllers", "insertControllerAt") }} を呼び出して、indexの値を0として設定してください。

下記の例では、ビューの標準コントローラによってコマンドの制御をオーバーライドされる placesCmd_openと、カスタムコマンドであるaCommandOfMyOwnの、2つのコマンドを制御するコントローラを作成しています。他のすべてのコマンドは、ビューの標準コントローラによって制御されます。

var controller = {
  doCommand: function (aCmd) {
    switch (aCmd) {
    case "placesCmd_open":
      alert("No.");
      break;
    case "aCommandOfMyOwn":
      alert("Shrimp and white wine.");
      break;
    }
  },
  isCommandEnabled: function (aCmd) {
    return true;
  },
  onEvent: function (aEventName) {},
  supportsCommand: function (aCmd) {
    return ["placesCmd_open", "aCommandOfMyOwn"].indexOf(aCmd) >= 0;
  }
};
var treeView = document.getElementById("myTreeView");
treeView.controllers.insertControllerAt(0, controller);

あなたのカスタムコントローラがカスタムビュー向けである場合、PlacesControllerによってサポートされるいくつかのコマンドの制御も含まれます。また、幸運なことにPlacesControllerがこれらのコマンドを制御する方法は、PlacesControllerに頼ることであなたの作業量を減らします。2つ方策があります。前段で述べたように、一方はPlacesControllerのインスタンス、もう一方はカスタムコントローラ、の二つを付随させることができます。または、あなたの使い方にあわせて修正されたPlacesControllerのインスタンスか、またはPlacesControllerインスタンスを加太代わりするための完全なカスタムコントローラのどちらか一方のみをコントローラとして使うことです。

下記の例では、PlacesController オブジェクトを作成することで、 placesCmd_openコマンドの制御をオーバーライドし、そして他の全てのコマンドは標準の挙動に頼っています。このケースでは、仮定したビューのコントローラは私たちがここで作成したカスタムコントローラだけであるので、それが優先されるのはあまり重要ではありません。それ故、insertControllerAt()の代わりに{{ Interface-method("nsIControllers", "appendController") }}を呼び出すことでコントローラを追加しています。

var treeView = document.getElementById("myCustomTreeView");
var controller = new PlacesController(treeView);
controller._doCommand = controller.doCommand;
controller.doCommand = function (aCmd) {
  if (aCmd === "placesCmd_open")
    alert("No.");
  else
    this._doCommand(aCmd);
};
treeView.controllers.appendController(controller);

{{ languages( { "en": "en/Places/View_Controller"} ) }}

このリビジョンのソースコード

<p>{{ draft() }}</p>
<p>{{ Firefox3() }}</p>
<p>コントローラはPlaces <a class="external" href="http://ja.wikipedia.org/wiki/Model_View_Controller" rel="external nofollow" target="_blank" title="http://ja.wikipedia.org/wiki/Model_View_Controller">model-view-controller</a> 設計におけるコンポーネントの1つです。コントローラは有効化、無効化を受け取り、<a href="/ja/Displaying_Places_information_using_views" title="ja/Displaying_Places_information_using_views">Places view</a>の状態を元にコマンドを実行します。</p>
<p>Placesは組み込み済みのコントローラを提供していますが、異なった目的のコントローラはアプリケーション中で使われており、Placesに特有のものではありません。一般的なコントローラの情報については、XULチュートリアル内の<a class="internal" href="/XUL_Tutorial/Commands" rel="internal">Commands</a>および<a href="/ja/XUL_Tutorial/Updating_Commands" rel="internal">Updating Commands</a>のページを参照してください。</p>
<h2 id="The_built-in_controller">The built-in controller</h2>
<p>Placesでは<code>PlacesController</code>という組み込みコントローラが提供されており、{{ Source("browser/components/places/content/controller.js") }}にてプロトタイプが定義されています。<a class="internal" href="/ja/Displaying_Places_information_using_views" title="ja/Displaying Places information using views">組み込みPlacesビュー</a>では<code>PlacesController</code>自動的にが使われるので、組み込みビューを使用する場合、コントローラを新たに書き起こす必要はありません。しかしながら、XUL文書内に<code>PlacesController</code>のソースを含める必要があります。ソースを含めるのには、{{ source("browser/components/places/content/placesOverlay.xul") }}をオーバーレイするのが推奨されます。このファイルは、組み込みPlacesコンテクストメニューとXUL <code>commandset</code>を含みます。詳しくは、<a class="internal" href="/ja/Displaying_Places_information_using_views#Instantiating" title="ja/Displaying Places information using views#Instantiating">Displaying Places information using views</a>を参照してください。</p>
<p><code>PlacesController</code>でサポートされている全てのコマンドをあなたのカスタムビューがサポートしており、また、<code>PlacesController</code>のコマンドしかサポートしていないのであれば、<code>PlacesController</code>をそのまま使うこともできます。もしあなたのビューが、これらのコマンドのサブセットだけをサポートしているのならば、<code>PlacesController</code>の長所のみを使用できるかもしれません。後述の<a href="#Creating_custom_controllers">Creating custom controllers</a>を参照してください。</p>
<h2 id="Places_commands">Places commands</h2>
<p><code>PlacesController</code> がサポートしているコマンド及びその詳細が下記に一覧されています。</p>
<p>コマンドの多くが、コントローラのビューにおいて現在選択されているノードを操作します。ただし注記しておきます。ビューの{{ Interface("nsIPlacesView") }}インターフェイスの<code>selectedNode</code> プロパティを読み取ることによって選択されたノードは発見されます。<code>selectedNode</code> プロパティではビューはひとつのノードしか選択しないと仮定されているので、<code>selectedNode</code> プロパティに依存するコマンドもまた、ビューがひとつのノードしか選択していないと仮定しており、ビューが複数のノードを選択している場合にはコマンドは動作しません。</p>
<p>いくつかのコマンドはコントローラのビューの結果に新規ノードを追加します。結果としてノードが挿入される位置は、ビューの{{ Interface("nsIPlacesView") }}インターフェイスの{{ Interface("nsIPlacesView") }}プロパティで定義された位置となります。</p>
<dl> <dt>placesCmd_deleteDataHost {{ fx_minversion_inline("3") }}</dt> <dd>{{ Interface-method("nsIPrivateBrowsingService", "removeDataFromDomain") }}.を呼び出すことによって、選択されたノードのドメインについての全てのデータを削除します。</dd> <dt>placesCmd_moveBookmarks</dt> <dd>選択されたノードを別のフォルダに移動させるのに使われるUIが表示されます。先述の1つのノードの選択に関する注記は適用されません。このコマンドはビューの<span class="lang lang-en"><code><a href="/ja/nsIPlacesView#getSelectionNodes%28%29" rel="internal">nsIPlacesView.getSelectionNodes()</a>を呼び出します。</code></span></dd> <dt>placesCmd_new:bookmark</dt> <dd><code><a class="internal" href="/ja/Places_utilities_for_JavaScript#showAddBookmarkUI.28.29" title="ja/Places utilities for JavaScript#showAddBookmarkUI.28.29">PlacesUIUtils.showAddBookmarkUI()</a>を呼び出すことによって、新規ブックマークを追加する際に使われるUIを表示します。</code>新規ブックマークはビューの挿入位置に挿入されます。もし挿入位置が存在しない場合は、<code>NS_ERROR_NOT_AVAILABLEが投げられます。</code></dd> <dt>placesCmd_new:folder</dt> <dd><code><a class="internal" href="/ja/Places_utilities_for_JavaScript#showAddFolderUI()" title="ja/Places utilities for JavaScript#showAddFolderUI()">PlacesUIUtils.showAddFolderUI()</a></code><code>を呼び出すことによって、新規フォルダを追加する際に使われるUIを表示します。</code>新規フォルダはビューの挿入位置に挿入されます。もし挿入位置が存在しない場合は、<code>NS_ERROR_NOT_AVAILABLEが投げられます。</code></dd> <dt>placesCmd_new:livemark</dt> <dd><code><a class="internal" href="/ja/Places_utilities_for_JavaScript#showAddLivemarkUI()" title="ja/Places utilities for JavaScript#showAddLivemarkUI()">PlacesUIUtils.showAddLivemarkUI()</a></code>.<code>を呼び出すことによって、新規ライブブックマークを追加する際に使われるUIを表示します。</code>新規<code>ライブブックマーク</code>はビューの挿入位置に挿入されま す。もし挿入位置が存在しない場合は、<code>NS_ERROR_NOT_AVAILABLEが投げられます。</code></dd> <dt>placesCmd_new:separator</dt> <dd>ビューの現在の挿入位置に新規セパレータが追加されます。もし挿入位置が存在しない場合は、<code>NS_ERROR_NOT_AVAILABLEが投げられます。</code></dd> <dt>placesCmd_open</dt> <dd><a class="internal" href="/ja/Places_utilities_for_JavaScript#openNodeIn()" title="ja/Places utilities for JavaScript#openNodeIn()">PlacesUIUtils.openNodeIn()</a>を呼び出し、現在のタブに、ビューで選択しているノードを開きます。</dd> <dt>placesCmd_open:tab</dt> <dd><a class="internal" href="/ja/Places_utilities_for_JavaScript#openNodeIn()" title="ja/Places utilities for JavaScript#openNodeIn()">PlacesUIUtils.openNodeIn()</a>を呼び出し、新規タブに、ビューで選択しているノードを開きます。</dd> <dt>placesCmd_open:window</dt> <dd><a class="internal" href="/ja/Places_utilities_for_JavaScript#openNodeIn()" title="ja/Places utilities for JavaScript#openNodeIn()">PlacesUIUtils.openNodeIn()</a>を呼び出し、新規ウィンドウに、ビューで選択しているノードを開きます。</dd> <dt>placesCmd_reload</dt> <dd>{{ Interface-method("nsILivemarkService", "reloadLivemarkFolder") }}を呼び出し、ビューで選択されているノードがライブブックマークであれば、再読み込みをします。</dd> <dt>placesCmd_reloadMicrosummary</dt> <dd>{{ Interface-method("nsIMicrosummaryService", "refreshMicrosummary") }}を呼び出し、ビューで選択されているノードがmicrosummaryであれば、再読み込みをします。</dd> <dt>placesCmd_show:info</dt> <dd><code><a class="internal" href="/ja/Places_utilities_for_JavaScript#showItemProperties()" title="ja/Places utilities for JavaScript#showItemProperties()">PlacesUIUtils.showItemProperties()</a>を呼び出し、ビューで選択されているノードの</code><code>プロパティ編集UIを表示します。</code></dd> <dt>placesCmd_sortBy:name</dt> <dd>{{ Interface-method("nsIPlacesTransactionsService", "sortFolderByName") }}を呼び出し、選択されているノードがフォルダであれば、フォルダ内のソートを行います。</dd>
</dl>
<p><code>PlacesController</code> はまた、標準の編集コマンドをサポートしています。</p>
<dl> <dt>cmd_copy</dt> <dd>ビューで選択されているノードをクリップボードにコピーします。先述の1つのノードの選択に関する注記は適用されません。このコマンドはビューの{{ Interface-method("nsIPlacesView", "getSelectionNodes") }}<span class="lang lang-en"><code>を 呼び出します。</code></span></dd> <dt>cmd_cut</dt> <dd>ビューで選択されているノードをクリップボードにコピーし、ノードを削除します。このコマンドの実装は、コピーに続けて削除を行う単純なものです。</dd> <dt>cmd_delete</dt> <dd>ビューで選択されているノードを削除します。 このコマンドはビューの{{ Interface-method("nsIPlacesView", "getRemovableSelectionNodes") }}<span class="lang lang-en"><code>を呼び出します。</code></span></dd> <dt>cmd_paste</dt> <dd>ビューの結果の現在の挿入位置にクリップボードのノードを追加します。もし挿入位置が存在しない場合は、<code>NS_ERROR_NOT_AVAILABLEが投げられます。</code></dd> <dt>cmd_redo</dt> <dd><code><a class="internal" href="/ja/Places_utilities_for_JavaScript" title="ja/Places utilities for JavaScript">PlacesUIUtils</a></code>で保持された{{ Interface("nsIPlacesTransactionsService") }}インスタンスの{{ Interface-method("nsITransactionManager", "redoTransaction") }}を呼び出して、最後のPlacesトランザクションをredoします。</dd> <dt>cmd_selectAll</dt> <dd>ビューの{{ Interface-method("nsIPlacesView", "selectAll") }}を呼び出し、ビュー中の全てのノードを選択します。</dd> <dt>cmd_undo</dt> <dd><code><a class="internal" href="/ja/Places_utilities_for_JavaScript" title="ja/Places utilities for JavaScript">PlacesUIUtils</a></code>で保持された{{ Interface("nsIPlacesTransactionsService") }}インスタンスの{{ Interface-method("nsITransactionManager", "undoTransaction") }}を呼び出して、最後のPlacesトランザクションをundoします。</dd>
</dl>
<h2 id="Creating_custom_controllers">Creating custom controllers</h2>
<p><code>PlacesController</code> がサポートしていないコマンドを使いたい場合、または<code>PlacesController</code> ではない方法でコマンドを制御したい場合、あなた自身によりコントローラを記述する必要があります。さもなくば、カスタムビューも記述している場合は、カスタムビューを使用しているとしても、<code>PlacesController</code>をそのまま使用することとなります。コントローラに慣れていない場合は、XULチュートリアル内の <a class="internal" href="/ja/XUL_Tutorial/Commands" title="ja/XUL Tutorial/Commands">Commands</a> 及び <a href="/ja/XUL_Tutorial/Updating_Commands" title="ja/XUL_Tutorial/Updating_Commands">Updating Commands</a>を参照してください。</p>
<p>組み込みビューのためのコントローラを自ら記述しているのならば、ビューが自動的にPlacesControllerのインスタンスである標準のコントローラを接続するという事実の利点を使うことができます。あなたのカスタムビューは、PlacesControllerがサポートしていようがしていまいが、オーバーライドを望む方法でコマンドをサポートする必要があります。他のすべてのコマンドは、ビュー標準のコントローラによって制御されます。あなたのコントローラが標準のものを上書きするのを保証するため、ビュー内のコントローラの一覧において、標準コントローラを前に持ってくるべきです。(なぜこうするべきか納得できない場合は、前段にリンクがあるチュートリアルを参照してください)<br>
ビューは単純に標準コントローラを最後に配置します。そのため、{{ Interface-method("nsIControllers", "insertControllerAt") }} を呼び出して、indexの値を0として設定してください。</p>
<p>下記の例では、ビューの標準コントローラによってコマンドの制御をオーバーライドされる <code>placesCmd_open</code>と、カスタムコマンドである<code>aCommandOfMyOwn</code>の、2つのコマンドを制御するコントローラを作成しています。他のすべてのコマンドは、ビューの標準コントローラによって制御されます。</p>
<pre class="brush: js">var controller = {
  doCommand: function (aCmd) {
    switch (aCmd) {
    case "placesCmd_open":
      alert("No.");
      break;
    case "aCommandOfMyOwn":
      alert("Shrimp and white wine.");
      break;
    }
  },
  isCommandEnabled: function (aCmd) {
    return true;
  },
  onEvent: function (aEventName) {},
  supportsCommand: function (aCmd) {
    return ["placesCmd_open", "aCommandOfMyOwn"].indexOf(aCmd) &gt;= 0;
  }
};
var treeView = document.getElementById("myTreeView");
treeView.controllers.insertControllerAt(0, controller);
</pre>
<p>あなたのカスタムコントローラがカスタムビュー向けである場合、PlacesControllerによってサポートされるいくつかのコマンドの制御も含まれます。また、幸運なことにPlacesControllerがこれらのコマンドを制御する方法は、PlacesControllerに頼ることであなたの作業量を減らします。2つ方策があります。前段で述べたように、一方はPlacesControllerのインスタンス、もう一方はカスタムコントローラ、の二つを付随させることができます。または、あなたの使い方にあわせて修正されたPlacesControllerのインスタンスか、またはPlacesControllerインスタンスを加太代わりするための完全なカスタムコントローラのどちらか一方のみをコントローラとして使うことです。</p>
<p>下記の例では、<code>PlacesController</code> オブジェクトを作成することで、 <code>placesCmd_open</code>コマンドの制御をオーバーライドし、そして他の全てのコマンドは標準の挙動に頼っています。このケースでは、仮定したビューのコントローラは私たちがここで作成したカスタムコントローラだけであるので、それが優先されるのはあまり重要ではありません。それ故、<code>insertControllerAt()の代わりに</code>{{ Interface-method("nsIControllers", "appendController") }}を呼び出すことでコントローラを追加しています。</p>
<pre class="brush: js">var treeView = document.getElementById("myCustomTreeView");
var controller = new PlacesController(treeView);
controller._doCommand = controller.doCommand;
controller.doCommand = function (aCmd) {
  if (aCmd === "placesCmd_open")
    alert("No.");
  else
    this._doCommand(aCmd);
};
treeView.controllers.appendController(controller);
</pre>
<p>{{ languages( { "en": "en/Places/View_Controller"} ) }}</p>
このリビジョンへ戻す