Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用KnockoutJs生成一个表with子句,使用内联模板每隔这么多项创建一个新行_Javascript_Html_Templates_Twitter Bootstrap_Knockout.js - Fatal编程技术网

Javascript 使用KnockoutJs生成一个表with子句,使用内联模板每隔这么多项创建一个新行

Javascript 使用KnockoutJs生成一个表with子句,使用内联模板每隔这么多项创建一个新行,javascript,html,templates,twitter-bootstrap,knockout.js,Javascript,Html,Templates,Twitter Bootstrap,Knockout.js,有人能告诉我如何在knockout中为viewModel的observableArray创建一个表,如下所示: 我知道您使用了foreach绑定等,但我需要每5个数组项创建一个新的TR行。我需要的表只有这么远的跨越和有对齐的复选框项目基本上。我让它在没有表格的情况下工作,只是在一个div中添加了一堆复选框(但复选框并没有全部对齐),但我希望有一个表格可以使单元格中的内容很好地对齐 这里有一篇文章,我发布了一些代码,但我试图把它们都放在一个TR中,但这不起作用,这里有另一个人试图做一些类似的事情,

有人能告诉我如何在knockout中为viewModel的observableArray创建一个表,如下所示:

我知道您使用了foreach绑定等,但我需要每5个数组项创建一个新的TR行。我需要的表只有这么远的跨越和有对齐的复选框项目基本上。我让它在没有表格的情况下工作,只是在一个div中添加了一堆复选框(但复选框并没有全部对齐),但我希望有一个表格可以使单元格中的内容很好地对齐

这里有一篇文章,我发布了一些代码,但我试图把它们都放在一个TR中,但这不起作用,这里有另一个人试图做一些类似的事情,但没有使用击倒

我知道如何使用常规jquery和外部模板引擎来完成我想要的事情,但如果有一种很好的击倒绑定模板的方式来完成这一切,我会尽量远离jquery

我可能会将一些引导类添加到表中,但我不确定,我的网站的其他部分也在使用这个框架。但更多的注意力放在淘汰赛上

数组项是如下所示的类:

function item(name, id) {
    var self = this;
    self.Name = name;
    self.Id = id;
}

当您需要更复杂的数据结构时,我建议使用一个依赖的可观察对象来完成。我假设您需要一系列行,每个行最多有5个tds

function someModel() {
    var self = this;
    self.items = ko.observableArray([]);
    self.items_grouped = ko.computed(function(){
        var grouped = [];
        var itemlist = self.items();
        for(var i = 0; i < itemlist.length; i+=5){
            var row = [];
            grouped.push(row);
            for(var j = 0; j < 5; ++j){
                row.push(itemlist[i+j]);
            }
        }
        return grouped;
    });
}

<table>
    <tbody data-bind="foreach: items_grouped">
        <tr data-bind="foreach: $data">
            <td>
                <span data-bind="text: Name"></span>
                <span data-bind="text: Id"></span>
            </td>
        </tr>
    </tbody>
</table>
函数someModel(){
var self=这个;
self.items=ko.observearray([]);
self.items\u grouped=ko.computed(函数(){
风险值=[];
var itemlist=self.items();
对于(变量i=0;i
当然,您可以使用手头上的任何库使集群实现更干净。
另一方面,使用表格进行布局几乎总是一个坏主意。

我将尝试一下。但是为什么使用表格是一个不好的布局方法呢。还有什么,我怎样才能在不使用表的情况下得到一堆复选框?代码多久调用一次这个计算的可观测值?似乎它会经常调用它,因为computed observable是最顶层的绑定,所以knockoutjs必须每隔几秒钟调用一次,以确保它具有正确的计算列表。是否有方法使DependentToServable依赖于items数组的更改?顺便说一下,DependentToServable现在是ko.computed。您需要了解ko.computed的工作原理。其要点是因为我正在访问computed函数中的self.items(),knockout知道存在依赖项,并且只会在self.items发生更改时重新计算它。整个故事要复杂得多,但总的来说,你可以相信它能正确地工作,而且不需要任何轮询。至于布局,有很多不同的方法可以做到这一点。我的css fu很弱,但浮动可以完成这项工作。
function someModel() {
    var self = this;
    self.items = ko.observableArray([]);
    self.items_grouped = ko.computed(function(){
        var grouped = [];
        var itemlist = self.items();
        for(var i = 0; i < itemlist.length; i+=5){
            var row = [];
            grouped.push(row);
            for(var j = 0; j < 5; ++j){
                row.push(itemlist[i+j]);
            }
        }
        return grouped;
    });
}

<table>
    <tbody data-bind="foreach: items_grouped">
        <tr data-bind="foreach: $data">
            <td>
                <span data-bind="text: Name"></span>
                <span data-bind="text: Id"></span>
            </td>
        </tr>
    </tbody>
</table>