javascript - 在 knockout.js 中从 JSON 数组中获取所有键

标签 javascript knockout.js knockout-mapping-plugin

我是第一次使用 knockout.js 并且有一个数组如下:

function AppViewModel() {
    var self = this;

    self.calls = ko.observableArray([
        { description: 'Create a new project', url: '/feeds/create', method: 'Get', params: [{ success: "true", token: "123adfds1" }] },
        { description: 'Get info', url: '/feeds/info', method: 'Get', params: [{ success: "true", token: "123adfds1" }] },
    ]);
}
ko.applyBindings(new AppViewModel());

我可以这样使用 foreach 语句来获取它们:

<tbody>
<!-- ko foreach: { data: calls, as: 'call' } -->
    <tr> 
        <td><span data-bind="text: description"></span></td>
        <td><span data-bind="text: url"></span></td>
        <td><span data-bind="text: method"></span></td>
        <!-- ko foreach: params -->
        <td>
            <span class="params" data-bind="text: $data"></span>                            
        </td>
        <!-- /ko -->
        <td class="last"><a href="" class="btn btn-mini">Edit</a></td>
    </tr>
<!-- /ko -->
</tbody>

我唯一的问题是我并不总是知道“params”数组中所有元素的名称,因此我想列出所有元素。

我怎样才能做到这一点?

谢谢

最佳答案

您的“params”不仅是一个具有不可预见数量属性的对象,而且显然是一个对象数组,每个对象都具有不可预见数量的属性,这让图片有点困惑。但是,一种解决方案可能是向您的 View 模型条目添加一个新的“计算”属性,如下所示:

function AppViewModel() {
    var self = this;

    self.calls = ko.observableArray([
        { description: 'Create a new project', url: '/feeds/create', method: 'Get', params: [{ success: "true", token: "123adfds1" }] },
        { description: 'Get info', url: '/feeds/info', method: 'Get', params: [{ success: "true", token: "123adfds1" }] },
    ]);

    ko.utils.arrayForEach(self.calls(), function(elem) {
        elem.parameterNames = ko.computed(function () {
            var keys = [];
            ko.utils.arrayForEach(elem.params, function (paramEntry) {
                for (var key in paramEntry)
                    keys.push({ key: key, value: paramEntry[key] });

            });

            return keys;
        });
    });
}

这会将您的结构及其未预料到的属性名称扁平化为标准化“键”/“值”实体的集合。那么您的 Knockout 绑定(bind)可能看起来像这样(请注意最上面的绑定(bind)是针对新的计算属性“parameterNames”而不是针对“params”)。

    <!-- ko foreach: parameterNames -->
    <td>
        <span class="params" data-bind="text: key"></span> - <span class="params" data-bind="text: value"></span>                       
    </td>

这有帮助吗?

关于javascript - 在 knockout.js 中从 JSON 数组中获取所有键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15232346/

相关文章:

mvvm - KnockOutJS - 单个 View 中的多个 View 模型

javascript - knockout 映射和 foreach 数据绑定(bind)在带有按钮的表上,缺少对 View 模型的引用?

javascript - Linux 上的 Node.js 依赖项不兼容

javascript - 使用 Jest 测试 Angular 应用程序 - Jest 遇到意外标记

javascript - Knockout observable 数组,在更改事件时获取更新的项目值

javascript - 为什么 Knockout js 示例中不显示姓氏

asp.net-mvc - Entity Framework + MVC 4 + Knockout.js AddView 模板?

javascript - 部署到 Heroku 期间出现扩展运算符语法错误

javascript - 如何在 Chrome 的 JavaScript 控制台中获取内联函数定义

knockout.js - 如何使用带有 knockout 、 knockout 映射和 jsrender 的模板