2012-03-28 52 views
3

我一直在經歷learn.knockout.js教程並一直在嘗試。 (使用with: chosenFolderDataforeach: mails):有人可以解釋爲什麼這工作[單頁的應用程序,步驟2教程]:Knockout.js - 瞭解foreach和

<!-- Mails grid --> 
<table class="mails" data-bind="with: chosenFolderData"> 
    <thead><tr><th>From</th><th>To</th><th>Subject</th><th>Date</th></tr></thead> 
    <tbody data-bind="foreach: mails"> 
     <tr> 
      <td data-bind="text: from"></td> 
      <td data-bind="text: to"></td> 
      <td data-bind="text: subject"></td> 
      <td data-bind="text: date"></td> 
     </tr>  
    </tbody> 
</table> 

但不是這樣(只使用foreach: chosenFolderData.mails):

<!-- Mails grid --> 
<table class="mails"> 
    <thead><tr><th>From</th><th>To</th><th>Subject</th><th>Date</th></tr></thead> 
    <tbody data-bind="foreach: chosenFolderData.mails"> 
     <tr> 
      <td data-bind="text: from"></td> 
      <td data-bind="text: to"></td> 
      <td data-bind="text: subject"></td> 
      <td data-bind="text: date"></td> 
     </tr>  
    </tbody> 
</table> 

嫌疑人這是因爲雖然chosenFolderData是可觀察的,chosenFolderData.mails不是。任何人都可以告訴我一定嗎?

非常感謝!

- 拉爾夫

回答

6

因爲你沒有實際訪問你想用它編寫的方式財產。在模型chosenFolderData中是一個可觀察對象,必須調用它才能檢索該值。爲了提供不使用with的功能(我建議不要使用with需要高性能是因爲開銷的必要)...

<tbody data-bind="foreach: chosenFolderData().mails"> 
+0

唉唉,謝謝。如果只有Javascript有靜態輸入... – Rafe 2012-03-29 00:05:28

+0

@Quintin Robinson - 你知道,Quintin,我已經在我剛剛發佈的問題中引用了你的答案的一部分:http://stackoverflow.com/questions/9927213/performance-調諧-A敲除的應用程序的指導方針換改善-resposne悌 – 2012-03-29 14:19:38