2011-10-20 6 views
66

KnockoutJS tutorials私は、説明できない変数$dataを含む次のコード例を見つけました。

ビュー(HTML):

<!-- Folders --> 
<ul class="folders" data-bind="template: { name: 'folderTemplate', foreach: folders }"></ul> 
<script type="text/html" id="folderTemplate"> 
    <li data-bind="css: { selected: $data == mailViewModel.selectedFolder() }, 
        click: function() { mailViewModel.selectFolder($data) }"> 
     ${$data} 
    </li>  
</script> 

ビューモデル(JavaScriptの):

var viewModel = { 
    // Data 
    folders: ['Inbox', 'Archive', 'Sent', 'Spam'], 
    selectedFolder: ko.observable('Inbox'), 

    // Behaviours 
    selectFolder: function (folder) { 
     this.selectedFolder(folder); 
    }  
}; 

window.mailViewModel = viewModel; 
ko.applyBindings(viewModel); 

チュートリアルでは、そのドル記号が使用されどのような任意の説明が含まれており、この$dataが来るしません。から。変数$dataはどこにも定義されておらず、$dataの3つのインスタンスの名前をすべて$foobarに変更すると、この例はもう機能しません。

ここではどのような種類の魔法が行われていますか?

+2

グレート質問を見てください、それは

.selected { color:red; } <ul class="folders" data-bind="template: { name: 'folderTemplate', foreach: folders }"></ul> <script type="text/html" id="folderTemplate"> <li data-bind="css: { selected: $data == mailViewModel.selectedFolder() },text:$data, click: function() { mailViewModel.selectFolder($data) }"> </li> </script> var viewModel = { // Data folders: ['Inbox', 'Archive', 'Sent', 'Spam'], selectedFolder: ko.observable('Inbox'), // Behaviours selectFolder: function (folder) { this.selectedFolder(folder); } }; window.mailViewModel = viewModel; ko.applyBindings(viewModel); 

を働かせました。私はこれで苦労していた。 – DavidHyogo

答えて

37

$data変数は、バインドされている現在のオブジェクトを参照するための組み込み変数です。この例では、これはviewModel.folders配列内の要素の1つです。

+0

あなたの簡単な説明をありがとう。したがって、 '$ data'変数は' foreach'が使われるときだけ存在します? – dokaspar

+1

テンプレート宣言のdataパラメーターを使用してその値を指定することもできます。また、dataパラメータまたはforeachパラメータが存在しない場合は、テンプレートのビューモデル全体がデフォルトで設定されます。 –

+3

その他の組み込み変数はありますか? – Nowaker

63

$データはKnockout's Binding Contextsの一部です。内でのみ利用可能

  • $親
  • $両親
  • $ルート
  • $コンポーネント
  • $データ
  • $インデックス(:ここ

    は、すべての組み込み変数ですforeachバインディング)

  • $ parentContext
  • $ RAWDATA
  • $ componentTemplateNodes
+0

リンクありがとう。私はサイトのナビゲーションでそれを見つけられませんでした。 – Aligned

+0

非常に便利なリンクとリスト – DavidHyogo

+0

これは非常に役に立ちました!ありがとうございました –

関連する問題