来自简单JSON的敲除映射插件和数据绑定

来自简单JSON的敲除映射插件和数据绑定,json,data-binding,knockout.js,knockout-mapping-plugin,Json,Data Binding,Knockout.js,Knockout Mapping Plugin,我在弄明白为什么这个简单的敲除映射不起作用时遇到了一些问题。我不确定返回的JSON是否无效,或者我的映射是否错误,或者仅仅是绑定 <div data-bind="foreach: conversation"> <div data-bind="foreach: messages"> <div class="well"> <div data-bind="text: sender_name"></div>

我在弄明白为什么这个简单的敲除映射不起作用时遇到了一些问题。我不确定返回的JSON是否无效,或者我的映射是否错误,或者仅仅是绑定

<div data-bind="foreach: conversation">
  <div data-bind="foreach: messages">
    <div class="well"> 
      <div data-bind="text: sender_name"></div> 
      <div data-bind="text: subject"></div>
      <div data-bind="text: body"></div>
      <div data-bind="text: updated_at"></div> 
    </div>    
  </div>
</div>  
数据结构是具有消息对象数组的父对话对象

<div data-bind="foreach: conversation">
  <div data-bind="foreach: messages">
    <div class="well"> 
      <div data-bind="text: sender_name"></div> 
      <div data-bind="text: subject"></div>
      <div data-bind="text: body"></div>
      <div data-bind="text: updated_at"></div> 
    </div>    
  </div>
</div>  
在绑定上,我现在使用foreach:Conversation,因为如果我将整个内容包装为一个元素数组,那么这个功能就可以工作了

<div data-bind="foreach: conversation">
  <div data-bind="foreach: messages">
    <div class="well"> 
      <div data-bind="text: sender_name"></div> 
      <div data-bind="text: subject"></div>
      <div data-bind="text: body"></div>
      <div data-bind="text: updated_at"></div> 
    </div>    
  </div>
</div>  
我的绑定

<div data-bind="foreach: conversation">
  <div data-bind="foreach: messages">
    <div class="well"> 
      <div data-bind="text: sender_name"></div> 
      <div data-bind="text: subject"></div>
      <div data-bind="text: body"></div>
      <div data-bind="text: updated_at"></div> 
    </div>    
  </div>
</div>  
当我返回封装在单个元素数组中的JSON数据时,它就起作用了

<div data-bind="foreach: conversation">
  <div data-bind="foreach: messages">
    <div class="well"> 
      <div data-bind="text: sender_name"></div> 
      <div data-bind="text: subject"></div>
      <div data-bind="text: body"></div>
      <div data-bind="text: updated_at"></div> 
    </div>    
  </div>
</div>  

如果我在本文中从JSON中删除了数组包装器(这是我想要的,因为我只想呈现一个对话),那么我就无法让它工作。有什么想法吗?

创建函数仅适用于数组

<div data-bind="foreach: conversation">
  <div data-bind="foreach: messages">
    <div class="well"> 
      <div data-bind="text: sender_name"></div> 
      <div data-bind="text: subject"></div>
      <div data-bind="text: body"></div>
      <div data-bind="text: updated_at"></div> 
    </div>    
  </div>
</div>  
试试这个

<div data-bind="foreach: conversation">
  <div data-bind="foreach: messages">
    <div class="well"> 
      <div data-bind="text: sender_name"></div> 
      <div data-bind="text: subject"></div>
      <div data-bind="text: body"></div>
      <div data-bind="text: updated_at"></div> 
    </div>    
  </div>
</div>  

<div data-bind="foreach: conversation">
  <div data-bind="foreach: messages">
    <div class="well"> 
      <div data-bind="text: sender_name"></div> 
      <div data-bind="text: subject"></div>
      <div data-bind="text: body"></div>
      <div data-bind="text: updated_at"></div> 
    </div>    
  </div>
</div>  
从map literal中删除约定并执行

<div data-bind="foreach: conversation">
  <div data-bind="foreach: messages">
    <div class="well"> 
      <div data-bind="text: sender_name"></div> 
      <div data-bind="text: subject"></div>
      <div data-bind="text: body"></div>
      <div data-bind="text: updated_at"></div> 
    </div>    
  </div>
</div>  
self.conversation(new Conversation(data));

Create函数仅适用于数组

<div data-bind="foreach: conversation">
  <div data-bind="foreach: messages">
    <div class="well"> 
      <div data-bind="text: sender_name"></div> 
      <div data-bind="text: subject"></div>
      <div data-bind="text: body"></div>
      <div data-bind="text: updated_at"></div> 
    </div>    
  </div>
</div>  
试试这个

<div data-bind="foreach: conversation">
  <div data-bind="foreach: messages">
    <div class="well"> 
      <div data-bind="text: sender_name"></div> 
      <div data-bind="text: subject"></div>
      <div data-bind="text: body"></div>
      <div data-bind="text: updated_at"></div> 
    </div>    
  </div>
</div>  

<div data-bind="foreach: conversation">
  <div data-bind="foreach: messages">
    <div class="well"> 
      <div data-bind="text: sender_name"></div> 
      <div data-bind="text: subject"></div>
      <div data-bind="text: body"></div>
      <div data-bind="text: updated_at"></div> 
    </div>    
  </div>
</div>  
从map literal中删除约定并执行

<div data-bind="foreach: conversation">
  <div data-bind="foreach: messages">
    <div class="well"> 
      <div data-bind="text: sender_name"></div> 
      <div data-bind="text: subject"></div>
      <div data-bind="text: body"></div>
      <div data-bind="text: updated_at"></div> 
    </div>    
  </div>
</div>  
self.conversation(new Conversation(data));

谢谢你,安德斯。那个么惯例是对不同的场景使用不同的映射吗?如果我处理的是一系列对话,我应该使用原始映射,而如果我处理的是单个对话,我应该使用修改后的映射?我希望使用单个映射来定义数据结构。你知道这在哪里有记录吗?我看不到[link]中提到的,那么你就不能一直使用数组,即使只是一次对话吗?你也不能深入嵌套映射文本,每次执行ko.mapping.fromJS()时都需要提供它。谢谢Anders。那个么惯例是对不同的场景使用不同的映射吗?如果我处理的是一系列对话,我应该使用原始映射,而如果我处理的是单个对话,我应该使用修改后的映射?我希望使用单个映射来定义数据结构。你知道这在哪里有记录吗?我看不到[link]中提到的,那么你就不能一直使用数组吗,即使只是一次对话?你也不能深入嵌套映射文本,每次执行ko.mapping.fromJS()时都需要提供它