2012-03-28 59 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