Knockout - 从Select All复选框列表的现有JSON数据创建模型

时间:2014-08-24 22:50:13

标签: json knockout.js faceted-search

这是一个非常冗长的陈述。

我正在构建一个在.Net中实现WebAPI并在前端使用Knockout的分面搜索。我的搜索响应包括两个对象列表,资源(具有用于呈现的数据的对象)和资源构面(字符串数组)。

\"ResourceFacets\": [\r\n \"Book\",\r\n \"Video\",\r\n \"DVD\",\r\n \"eBook\",\r\n \"Audio\"\r\n ]\r\n}"

我的ViewModel包含构面和资源以及用于处理自定义行数的表示对象:

function ViewModel() {
    this.facets = ko.observableArray(results.ResourceFacets);
    this.resources = ko.observableArray(results.ResourceResults);

    this.resourceRows = ko.computed(function() {
        var rows = [],
            rowIndex = 0,
            itemsPerRow = 2;

        var resourceList = this.resources();

        for (var index = 0; index < resourceList.length; index++) {
            if (!rows[rowIndex]) {
                rows[rowIndex] = [];
            }

            rows[rowIndex].push(resourceList[index]);

            if (rows[rowIndex].length == itemsPerRow) {
                rowIndex++;
            }
        }

        return rows;
    });
};

这允许我创建一个动态的复选框列表来处理构面并显示资源结果。我现在要做的是添加一个Select All复选框,默认情况下会选中所有框。从我见过的其他例子来看,我的理解是我需要一个可观察的属性,例如&#34; Selected&#34;,在ResourceFacet上。我觉得API需要了解我的演示文稿太多了。

所以我的问题是如何避免添加&#34;选择&#34; bool值为ResourceFacets但仍然可以选择所有复选框或取消选择&#34; All&#34;用户取消选择方面时的复选框?

1 个答案:

答案 0 :(得分:0)

除了facetsresources之外,您还可以保留跟踪视图模型的单独成员选择所需的布尔值列表。只需创建一个与facets大小相同的布尔值的新observableArray,并将这些值绑定到复选框。

另一个解决方案是根据results.ResourceFacets创建动态绑定复选框所需的对象,保持API清洁。例如:

var realModel = [];
for (var i = 0; i < results.ResourceFacets; i++) {
    realModel.push({ name: results.ResourceFacets[i], chkBoxVal: ko.observable(false) });
}
this.facets = ko.observableArray(realModel);
相关问题