在 KnockoutJS 中获取可观察的多维数组(对象)

2024-01-22

我正在使用 Knockout 构建一个应用程序,发现它非常有用。 虽然,我在获取多维数组(对象)可观察时遇到问题。

目前我正在使用以下结构:

    self.form = ko.observableArray(ko.utils.arrayMap(initialData, function(section) {
        var result = { 
            name : section.name, 
            code : section.code, 
            type : section.type, 
            fields: ko.observableArray(section.fields) 
        };
        return result;
    }));

它工作得很好,但如果初始数据是两个以上的级别。 我尝试过类似的东西

    self.form = ko.observableArray(ko.utils.arrayMap(initialData, function(block) {
        var result = { 
            name : block.name, 
            code : block.code, 
            type : block.type, 
            sections: ko.observableArray(ko.utils.arrayMap(block.sections, function(section) {
                var result = { 
                    name : section.name, 
                    code : section.code, 
                    type : section.type, 
                    fields: ko.observableArray(section.fields) 
                };
                return result;
            }))
        };
        return result;
    }));

最终的数组结构看起来不错,但是当我推送到sections数组时,knockout不会更新DOM:

    self.addField = function( section ) {
        field = {
            code: uid(),
            name: "New Field",
            value: '',
            type: section.type
        };
        section.fields.push(field); 
    };

我还尝试了 knockout.mapping.js 插件(这是正确的方法吗?) 首先看起来不错,但在推入上面的函数后,我的新字段元素不可观察,只是对象。

插件文档说:

// Every time data is received from the server:
ko.mapping.fromJS(data, viewModel);

但我不确定这是否是我的情况。

如果有人有任何想法,我们将不胜感激。

Thanks.

更新: 让第一层和第二层可观察不是问题,问题是更深入。

这是一个例子初始数据:

var blocks = [
    {
        "name" : "",
        "sections" : [
            {
                "name" : "Section 1",
                "fields" : [
                    {
                        "name" : "Field A",
                        "type" : "checkbox",
                        "code" : uid()
                    }
                ]
            }
        ]
    }
];

HTML

<div data-bind='template: { name: tpl-form-field-checkbox, foreach: fields }'></div>
<button class="btn addField" data-bind="click: $root.addField">Add</button>

<script type="text/html" id="tpl-form-field-checkbox">
    <input type="text" name="" value="<%= name %>" /> <br/>
</script> 

地图插件是最好的方法。它会自动将您的对象映射到 observables 和 observableArrays 中,因此您无需手动执行此操作。

这是一个简单的小提琴,可能会给您一些指导:http://jsfiddle.net/jearles/CGh9b/ http://jsfiddle.net/jearles/CGh9b/

在此示例中,我创建了一个树结构,它们允许您添加新条目。您可以看到,我能够毫无问题地继续添加越来越深的级别,并且因为名称是可观察的,所以它们可以更改。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 KnockoutJS 中获取可观察的多维数组(对象) 的相关文章

  • 我可以对每个对象属性执行 jquery-tmpl 吗

    模板 each 指令非常适合迭代数组 如下所示 var myArray a b c 我想知道是否有等效的对象属性迭代 即 var myObj propOne a propTwo b propThree c 我想要一个可以让我输出的模板 ul
  • 何时使用 ko.utils.unwrapObservable?

    我使用 KnockoutJS 编写了一些自定义绑定 我仍然不确定何时使用ko utils unwrapObservable item 查看代码 该调用基本上检查是否item是一个可观察的 如果是 则返回value 如果不是 则返回value
  • Knockout无法识别手动点击

    这是样本http jsfiddle net HhXGH 57 http jsfiddle net HhXGH 57 我正在通过 jquery 单击单选按钮 但 knockout js 无法识别它 它仍然显示第一个单击的值 p Send me
  • knockoutjs 中的滑动动作绑定

    我在我的应用程序中使用淘汰赛作为主要框架 它必须支持平板电脑和移动设备 由于框架是基于绑定处理程序构建的 我想知道如何实现对操作 如滑动和其他特定于设备的操作 的自定义绑定 或者也许有类似的事情完成 可能为时已晚 但这里有一个库 将触摸绑定
  • 当鼠标离开父级时,为什么 IE 8 会因引导、淘汰验证和自定义绑定处理程序而崩溃?

    好吧 这是一个疯狂的错误 我和同事无法弄清楚 Internet Explorer 8 崩溃 没有控制台错误消息 当使用具有自定义绑定 数据绑定 的无线电输入更改淘汰可观察值并且您移出父 DOM 容器时 就会发生这种情况 在 IE 8 浏览器
  • KnockoutJS:在 Select 中的每个选项上调用单击事件

    我希望每当用户单击 SELECT 元素中的选项时 Knockout 都会调用一个事件 这是我的 JavaScript function ReservationsViewModel this availableMeals mealName S
  • Knockout 中的 TextBox 数据绑定问题(提供小提琴)关键问题之一

    Step 1 在我的页面加载时 我使用自定义绑定在文本框中显示日期 Step 2 问题在于 当我尝试发布文本框中的内容时 我在控制器上得到的最小日期是错误的 即 01 01 0001 00 00 00 我的cshtml
  • DurandalJS 路由行为

    我拥有的 试图了解发生了什么以及如何控制它 我对尚未经过身份验证的用户有一个 公共 视图 对经过身份验证的用户有一个 主页 视图 这是我的路线配置 app start then function Replace viewmodels in
  • jQuery Mobile 与 KnockoutJS ListView 问题

    我正在尝试的这个例子 列表视图最终并没有漂亮的外观 谁能建议我做错了什么 这种情况特别发生在 data inset true 上 http jsfiddle net xQ9Uu 1 http jsfiddle net xQ9Uu 1 如果我
  • Knockout.js、映射插件和 moment.js - 格式化/映射 json 日期

    我将 Knockout js 与映射插件一起使用 我正在获取一些 json 数据并使用映射插件将其映射到我的 html 中 json 数据中是 json 格式的日期 我需要使用映射插件将其映射到 html 中 是否可以使用 moment j
  • 在 KnockoutJS 中更改模型数据时,Javascript 内存泄漏

    我们正在构建一个相当大的单页应用程序 使用 KnockoutJS 作为 数据处理程序 问题是 当更改模型数据时 垃圾收集器不会处理旧模型 看起来如此 该应用程序有大约 12 个不同的模型 其中包含计算的可观察量 您可以使用它们检索关系 在
  • Knockout 将 css 类绑定到观察到的模型属性

    我想将 divs css 类绑定到视图模型的属性 如下所示 div 但这会产生结果 div class 0 1 2 3 这是视图模型 myViewModel selectedPriority ko observable High Compa
  • Knockout ObservableArray 不更新 HTML Foreach

    所以我有一个可以正常工作的 observablearray 但 UI 没有更新 我读过很多人遇到这种类型的问题 但我没有看到 所以 HTML 是 tbody tr td span class label label success Yup
  • 使用 Knockout 使用多个字段/列和控件来过滤 ViewModel 数据

    我是 KnockoutJS 的新手 但到目前为止我很喜欢它 我想做的是使用表单上的多个字段 列和控件来过滤我的视图模型的数据 但我不知道该怎么做 让我 希望 进一步解释一下 我有一个 viewmodel 可观察的数据数组 其中填充了来自后端
  • Knockout.js——理解 foreach 和 with

    我一直在阅读 learn knockout js 教程并进行实验 有人可以解释为什么这有效吗 教程 单页应用程序 步骤 2 使用with chosenFolderData and foreach mails table class mail
  • 淘汰赛“闪烁”问题

    我正在使用 KO 构建 SPA 单页应用程序 该应用程序看起来像一本书 用户可以翻页 问题是 每次加载页面时 都会有一小段时间页面 闪烁 用户会看到页面的无样式版本 我猜这是因为很多样式都依赖于 ko 绑定 所以在 ko 完成它 神奇 之前
  • 敲除映射导致堆栈溢出

    我正在尝试淘汰赛和映射插件 并想知道为什么这不起作用 我有一个要使用映射扩展加载的视图模型 function todoListViewModel data ko mapping fromJSON data todos TodoItem op
  • knockout valueUpdate 无法与 Pagedown 一起使用?

    我的看法有以下几点
  • 声明为对象文字与函数的剔除视图模型之间的区别

    在knockout js中 我看到视图模型声明为 var viewModel firstname ko observable Bob ko applyBindings viewModel or var viewModel function
  • 使用淘汰赛动态显示/隐藏元素

    我有一个表 有四列 即代码 名称 数量和价格 其中 我想动态更改数量列的内容 元素 通常 它应该显示其中显示数量的元素 当用户单击元素时 我想显示该元素 以便用户可以编辑数量 我正在尝试按照 示例2 来实现淘汰赛文档链接 http knoc

随机推荐

  • 如何清除 StyledDocument 中的所有样式?

    样式文档 http docs oracle com javase 7 docs api javax swing text StyledDocument html包含各种设置样式的方法 喜欢设置角色属性 http docs oracle co
  • pygame 中有像海龟一样的 .stamp() 方法吗?

    我正在开发一个简单的 pygame 项目 在其中您可以通过按空格来克隆自己 我在 Turtle 中使用以下命令创建了这个项目Turtle stamp 但我不确定pygame中是否存在这样的东西 简短回答 不 没有一个 长答案 但是 您可以轻
  • 如何在 Swift 中加载 UIWebView 中的 URL?

    我有以下代码 UIWebView loadRequest NSURLRequest URL NSURL string google ca 我收到以下错误 NSURLRequest 无法转换为 UIWebView 知道问题是什么吗 加载请求
  • Angular2 - “无法绑定到‘ngSwitchWhen’,因为它不是‘模板’的已知属性。”

    我收到以下错误 无法绑定到 ngSwitchWhen 因为它不是 模板 的已知属性 我读过不同的主题 建议添加 从 angular common 导入 CommonModule 并将 CommonModule 添加到 NgModel的导入部
  • Xcode 8 beta 6 - 架构的冲突值

    我尝试使用 Xcode beta 6 在设备上安装我的应用程序 但它在链接阶段失败并出现以下错误 ld linking module flags Objective C Class Properties IDs have conflicti
  • 应用两个数据框

    我正在使用 R 并且我有两个 data frames A and B 它们都有 6 行 但是A有 25000 个列 基因 并且B有 30 列 我想应用一个带有两个参数的函数f x y where x是每一列A and y是每一列B 到目前为
  • C# 将列表拆分为 n 组的所有组合 - 来自 Python 的代码迁移

    我所追求的算法有一个很好的实现here https stackoverflow com questions 39192777 python split a list into n groups in all possible combina
  • 扩展 Laravel 核心日志记录

    我回来时遇到了更多 Laravel 问题 因为我在理解事物方面遇到了问题 再次 我尝试创建一个包来进行我自己的日志记录 在进行了一些额外的阅读 浏览核心代码并尝试其他方法之后 我得出的结论是 我需要做的就是扩展 laravel 日志记录的核
  • 加载内容后显示引导模式

    我正在使用 Bootstrap 3 模式 其中我从 getJson 函数加载一些数据 由于模式内的数据加载速度不一样快 我想显示加载图像 文本 加载所有数据后 然后显示 打开模式 我找到了这个Thread https stackoverfl
  • Html显示格式化文本

    我必须在 html 页面上显示一堆文本 文本看起来像这样 001 This is a Line 00 12 04 002 003 Everthing looks good so far 文本是 预先格式化的 包含大量空格和破折号 每行都具有
  • JQuery 到 asmx 在 Windows 2008 R2 SP1 上失败

    自从安装 SP1 以来 我们在从 JQuery 客户端代码调用 asmx 页面时遇到了问题 IIS 将 JQuery post 调用指向他的默认 404 页面 我们对环境进行了角色恢复 断言此问题是由 SP1 引起的 并且测试证实了这一点
  • mongodb-java POJO不返回id

    我是 MongoDB 的新手 在这里有点疯狂 我正在使用最新的 mongo java driver 版本和 dropwizard 我使用 POJO 写入 DDBB 它有效 但是 当尝试获取元素时 我没有得到实际的 id 这是我尝试过的 DD
  • 如何在数字的最后三位数字之前插入小数点?

    我有一个数字 需要添加小数以进行格式化 该数字保证在 1000 到 999999 之间 我已经以其他方式介绍了其他可能性 这是我无法理解的 我需要在最后 3 位数字之前添加小数 例如 1000 gt 1 000 23513 gt 23 51
  • 我可以向 HTML 标记添加自定义属性吗?

    我可以向 HTML 标记添加自定义属性吗 如下所示
  • 在 Google App Engine 中创建表单自动完成

    我想为标签字段构建一个自动完成功能 就像 App Engine 上的 SO 一样 知道我应该如何进行这个过程吗 服务器端算法 自动完成应该有什么逻辑 应用程序引擎实施 数据存储架构应该是什么 嘿 几天前我就遇到了这个问题 只要您有想要搜索的
  • 如何在 ASP.Net Core Razor 页面中返回带有模型的页面

    如何重定向到页面并传递其模型 就像我们在 MVC 中所做的那样return View model MyModel 我尝试过的 return RedirectToPage Notify new Model notifierVM 注意 我要返回
  • 如何立即关闭 C 程序?

    我正在编写 C 代码 在其中分析一些数据 我已将程序设置为仅处理 100 个数据输入 当输入超过 100 个时 就会出现分段错误 我想创建一种方法 以便当输入数量超过 100 时 用户将收到警告并且程序将终止 我知道如何从主要功能中简单地做
  • MyGroups 未在 Communicator.UIAutomation 中实现

    我正在开发一个浏览器外的 Silverlight 应用程序 它提供了一些 MS Office Communicator 2007 控件 我正在使用 与 SDK 一起安装的文档指出 IMessenger2 界面中有一个 MyGroups 属性
  • 测试 swift 异步函数超时

    如何编写一个单元测试来检查异步函数是否不会超时 我正在尝试常规XCTestExpectation 但是因为await暂停一切 是等不到期待 在下面的代码中 我正在检查loader perform 执行时间不超过1秒 func testLoa
  • 在 KnockoutJS 中获取可观察的多维数组(对象)

    我正在使用 Knockout 构建一个应用程序 发现它非常有用 虽然 我在获取多维数组 对象 可观察时遇到问题 目前我正在使用以下结构 self form ko observableArray ko utils arrayMap initi