2012-03-09 7 views
1

私はJavascript MVCフレームワークへの初心者は、従来のJavascript(及びいくつかのjQueryの経験)から来るKnockout.js構文

Knockout.jsだ、私は構文を理解するのに困難を抱えていKnockout.jsを学習

以下の文章を考えてみましょう。

ビュー:

<ul class="folders" data-bind="foreach: folders"> 
<li data-bind="text: $data, 
       css: { selected: $data == $root.chosenFolderId() }, 
       click: $root.goToFolder"></li></ul> 

ビューモデル:

function WebmailViewModel() { 
    // Data 
    var self = this; 
    self.folders = ['Inbox', 'Archive', 'Sent', 'Spam']; 
    self.chosenFolderId = ko.observable(); 

    // Behaviours  
    self.goToFolder = function(folder) { self.chosenFolderId(folder); };  
}; 

はあなたが私の文は何をすべきか(特に$データ、$ルートを)説明してくださいもらえますか? self.chosenFolderId(folder);のステートメントも何ですか?

答えて

10

$ dataキーワードと$ rootキーワードは、通常KOによって使用されます。 配列(データバインド)でforeachを使用すると、KOは配列内の各要素に対して1つの<li>を作成します。

この場合、$ dataは配列の現在の項目(folders [i]など)で、$ rootは親要素です。反復の $データ=現在のフォルダ(viewModel.folder [i])と=のViewModel

self.chosendFolderId(フォルダ) $ルートはあなたのViewModel chosenFolderIdメソッドを実行します。あなたのために 、フォルダがあなたのViewModelのフィールドがあります。関数では、キーワード "this"はviewModelではなくメソッドの送信者であるため、コードはselfを使用してviewModel値を保持します。それは閉鎖です。

編集: $親キーワードはツリーの優先レベルです。 $ rootキーワードはトップツリーのレベルです。

viewModel { 
    topObjects : ko.observableArray() 
} 

viewModel.topObjects.push({ 
    Objects : ko.observableArray() 
}); 

我々はviewModel.topObjects.Objects上のforeachを作成する場合は、$親がtopObjectsで、$ルートはViewModelにあります。

おかげTjorriemorrie ;-)

+1

$ parentは親で、$ rootはルートではありませんか? – Tjorriemorrie

+0

投稿を修正します。どうもありがとう。 – Cedric

1

あなたの質問に答えるには、およそself.chosenFolderId(folder)

それは、観察chosenFolderIdに値を書き込みます。あなたは、この提供されたコードでは(同じことである)は、その後、選択CSSにはない自己からの参照を変更しようとすると、引数の値が「folderは」$data.

0

の実際の現在の値であり、作業。なぜ誰が知っていますか?

this.goToFolder = function(folder) { this.chosenFolderId(folder); };