【问题标题】:How to create Html Table from viewmodel如何从视图模型创建 Html 表
【发布时间】:2013-06-03 20:38:36
【问题描述】:

我正在创建一个数据表,其中 html 表中的每个单元格都可以是一个输入控件,也可以是另一个 html 控件,如 select(现在我需要为输入控件工作)。像这样的:

<Table>
      <thead>
        <tr>
            <th>Column1</th>
            <th>Column2</th>
         </tr>
    </thead>
    <tbody>
         <tr>                
             <td><input type="text" value=80 /></td>
             <td><input type="text" value=100 /></td>
         </tr>         
        <tr>                
             <td><input type="text" value=120 /></td>
             <td><input type="text" value=140 /></td>
         </tr>  
        <tr>                
             <td><input type="text" value=160 /></td>
             <td><input type="text" value=180 /></td>
         </tr>
    </tbody>
</Table>    

我目前发现的只是使用简单的数据绑定创建数据表,因此每个单元格都是只读单元格。

this jsfiddle 中,您可以看到我期望以某种方式得到的结果。

更新:我需要的是创建一个表,其中列数和行数将取决于数据源(在本例中为视图模型的属性)。

【问题讨论】:

  • 您不是很清楚:您的确切问题/问题是什么?您在哪里卡住了/为什么您的解决方案不起作用?

标签: javascript knockout.js viewmodel


【解决方案1】:

您引用的小提琴的问题是列表中项目的属性不可观察。我使用淘汰赛映射插件为我做这件事。

Here is an updated fiddle 演示了当您编辑上表中的值时,下表中的值会发生变化。

这里是代码,但记得参考敲除映射插件。

*更新的答案....查看评论和UPDATED JSFIDDLE*

HTML

Generated table using ko    
<table border="1">
    <thead>
        <tr data-bind='foreach: datacolumns'>
            <th>
                <span data-bind="text: ColumnName"></span>
            </th>      
        </tr>
    </thead>
    <tbody data-bind="foreach: dataModel">
        <tr  data-bind='foreach: $root.datacolumns'>
            <td>
                <input type="text" data-bind="value:$parent['Value' + ColumnName]"/>
            </td>
        </tr>
    </tbody>
</table>
<br/>
And this table updates when you tab out of the textboxes
<table border="1">
    <thead>
        <tr data-bind='foreach: datacolumns'>
            <th>
                <span data-bind="text: ColumnName"></span>
            </th>      
        </tr>
    </thead>
    <tbody data-bind="foreach: dataModel">
        <tr  data-bind='foreach: $root.datacolumns'>
            <td data-bind="text:$parent['Value' + ColumnName]"></td>
        </tr>
    </tbody>
</table>

Javascript

function ViewModel(model,columns) {
    var self = this;          

    self.dataModel = ko.mapping.fromJS(model);  
    self.datacolumns = columns;    
}    
var columns =  [{ColumnName:'Column1'},{ColumnName:'Column2'}];

var model =  [
    { ValueColumn1: '80', ValueColumn2: '100' },
    { ValueColumn1: '120', ValueColumn2: '140' },
    { ValueColumn1: '160', ValueColumn2: '180' }
] ;

ko.applyBindings(new ViewModel(model,columns));  

【讨论】:

  • 感谢您的编辑和快速答复。也许我在尝试描述我的问题时犯了一些错误:(。我的问题/问题与如何使用视图模型中的数据源属性创建动态 html 表(带有输入或其他控件)有关。在我的示例中,我放置了两个表:1 ) 展示我想要展示的内容。 2)一个关于如何从视图模型创建表的简单示例。即从数据库中获取列和行数并创建一个动态表。再次感谢您的回复。
  • 我已经更新了脚本。你可以在这里看到我的改变:jsfiddle.net/rolandomartinezg/vRYV5/1
猜你喜欢
  • 1970-01-01
  • 2021-11-11
  • 2021-09-07
  • 1970-01-01
  • 1970-01-01
  • 2022-08-24
  • 2016-07-07
  • 1970-01-01
  • 2015-09-02
相关资源
最近更新 更多