问题标签 [knockout-mapping-plugin]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
knockout.js - 使用 KnockoutJS 映射插件执行部分更新
现在,我将这个 JSON 与 KO Mapping 插件一起使用,它工作正常:
现在我的要求是执行“部分更新”。我想这样做的一些场景:
- 我需要更改第二个控件中的 Data 数组。
- 我只需要更新一个控件而不是整个页面(这是我正在序列化的类,这个 JSON 中的根)。
- 我需要向我的页面添加另一个控件。
也许另一种解决方法是用 重新创建原始对象ko.mapping.toJS(viewModel)
,对其进行更改然后重新映射它......但我相信你会得到更好的东西。
编辑:我试过ko.mapping.fromJS(updatedControl, viewModel.Controls()[0])
但没有用,这是我的代码:
回复:
EDIT2: check it out at http://jsfiddle.net/faloi/4FcAy/10/
javascript - Knockout.js 可观察绑定未更新(使用 JSON 映射)?
背景:我有一个使用映射插件的单页 knockout.js 应用程序。数据通过来自服务器的 Websocket JSON 更新。我可以看到应用程序正在成功接收数据(在控制台中打印数据)并且当有对象删除/添加时,ViewModel 更新没有问题。
问题:从服务器更新对象的属性时,它不会更改ViewModel。我是否需要在每次更新时以某种方式返回对象属性?
以下是相关的代码片段:
在 ViewModel 中:
感谢您的洞察力!
javascript - 嵌套数组的 KnockoutJS 映射更新“超出堆栈空间”
更新:尝试制作小提琴来重现问题:http: //jsfiddle.net/gY2JV/29/ 结束更新
我有一个来自 DocModel 类型的服务器的对象。它的层次结构看起来像这样。
我在以下视图模型中使用它:
这是我的视图(td 中的内容可能与问题无关——我只是在 Documents 中的每个 Document 上映射一堆标量属性):
当我在淘汰赛尝试更新视图模型之前中断时,我可以看到 response.d 正在以正确的格式返回正确的数据,但是堆栈空间不足。那是怎么回事。
knockout.js - 如何删除从 ajax 调用返回的 JSON 生成的 Knockout 映射数组的成员?
我正在使用 knockoutjs 和映射插件从服务器调用返回的 JSON 生成视图模型。我从服务器获取一个数组,创建一个将映射数组作为属性的模型,然后将该数组数据绑定到模板以在屏幕上呈现所有数据。效果很好。
我想在每个项目旁边呈现一个按钮,以便我将其删除,就像本视频中的示例一样(见 14:20 左右)。
但在视频中,他绑定到在数组元素上定义的函数。我的元素是使用映射插件从 JSON 生成的,所以我不确定如何向每个元素添加函数,或者我什至是否想这样做。或者我可以让按钮的点击绑定到视图模型上的一个函数并传入与按钮关联的元素的 id?
我的JavaScript:
这是模板:
和完整的HTML:
knockout.js - KnockoutJS 总是通知订阅,即使映射数据相同
似乎 Knockout 在 foreach 绑定上方便的“afterRender”方法仅在添加数据时触发,而不是删除。
您可以在此处进行测试 - http://jsfiddle.net/farina/4BaXs/1/单击加载初始值,查看四个警报,然后单击加载删除并注意没有任何反应。
所以,为了解决这个问题,我决定尝试手动订阅我的 ko.mapping.fromJS 数组,但这只会导致每次我从 AJAX 更新数据时调用,即使数据没有改变。
我觉得映射插件在某种程度上失败了,并且认为数据总是新的,即使它不是。
是否有某种事件仅在数组更改时发生?我对单个项目的订阅按预期工作,但显然您不能订阅整个项目列表?
knockout.js - 使用嵌套的 foreach 导致停止脚本错误的 knockoutJS
我正在使用 knockout.js 来呈现我的视图,我正在从服务器获取数据并像这样绑定..
我的观点......我已经修剪了一些......但绑定是一样的......
数据包含一个对象数组,每个对象中都有另一个数组……大约有 500 个项目需要渲染。
虽然我一直在测试,但我没有遇到任何问题,但是在部署时,我不知道它是否是慢速电脑,但他们得到了“这个脚本正在执行慢 - 停止?” 信息。如果您单击“否”几次,它将呈现。
在淘汰赛中处理大数据集的技术是什么?理想情况下,我希望渲染异步完成,让用户在忙于工作时继续他们的事情......
这些属性实际上不需要是可观察的——这是一次渲染……什么都不会改变。为了方便起见,我使用了映射 API。
更新:好的,所以我进行了更改,不再使用映射 api - 页面正在加载,但仍然很慢......有什么想法吗?改变:var viewModel = data;
knockout.js - 在 KnockoutJS 中计算原型上的 observables 是否可行?
我有一系列从服务返回的项目。我试图为每个 Item 实例定义一个计算的 observable,所以我的直觉告诉我把它放在原型上。
计算 observable 的一种情况:系统计算点,但用户可以选择覆盖计算值。我需要保持计算值可用,以防用户删除覆盖。我还需要合并用户分配和计算的点,并将总数加起来。
我正在使用映射来执行以下操作:
它现在的工作方式,我必须调用匿名函数来返回计算的 observable。这似乎为每个绑定创建了一个计算的 observable 的新实例,这违背了将其放在原型上的大部分要点。每次访问 observable 时都必须破译使用多少个括号,这有点烦人。
它也有些脆弱。如果我尝试在代码中访问 Points(),我不能这样做
因为这会将 Points() 的上下文更改为 DOMWindow,而不是 item。
如果我将计算结果放在映射中的 create() 中,我可以捕获上下文,但是每个对象实例上都有该方法的副本。
我找到了 Michael Best 的 Google Groups 帖子 ( http://groups.google.com/group/knockoutjs/browse_thread/thread/8de9013fb7635b13 )。原型在“激活”时返回一个新的计算 observable。我还没有弄清楚什么叫做“激活”(也许是 Objs?),但我猜它仍然会每个对象发生一次,而且我不知道“这个”会得到什么范围。
在这一点上,我相信我已经超越了已发布文档中可用的内容,但我仍在努力从源头上破译正在发生的事情。
asp.net-mvc - KnockoutJS:ko.mapping.fromJS 问题
我的 JS:
表格html:
触发更新的按钮.. 搜索字典并返回结果以替换表中当前的内容:
在我的操作方法中,这是返回的:
我遇到的问题是它似乎由于某种原因陷入了无限循环。我在动作中设置了一个断点,我可以看到它一遍又一遍地去那里......连续......
我究竟做错了什么?完全是淘汰赛的新手(在 JS 方面也不完全是超级,所以请不要给出模糊的答案)
knockout.js - 淘汰映射到JS错误?空数组项
使用 knockoutjs 映射插件 2.11,我发现如果使用 ko.mapping.fromJS 更新视图模型(带有数组元素)并且新数组元素的长度比旧数组元素长,ko.mapping.toJS 会生成空数组项。
我映射的初始数据是:
然后我用一个新对象更新了视图模型:
之后我调用了 ko.mapping.toJS(),我发现第三个数组项是一个空对象。我不确定这是一个错误还是我错过了什么。我注意到的另一件事是,它仅在我第一次更新数据时发生。如果我用 initData 然后再用 newData 更新视图模型,结果是正确的。http://jsfiddle.net/gonglei/xgPSq/
编辑:感谢您的回答杰森。您的解决方案似乎不适合我在实际项目中的情况。我需要检索修改后的数据对象并将其发送到服务器。因此,当我调用 ko.mapping.toJS 时,我希望我能立即获得正确的数据对象,而不仅仅是在计算函数中显示 JSON 字符串。我在调用 ko.mapping.toJS 后立即设置了一个断点并观察数据对象,第三个元素确实是空的。我的服务器确实收到了这个空元素。油门扩展器确实让我得到了正确的对象,但它是异步方式。反正我是报bug了,看看开发者能不能确认一下或者给我解决办法。
knockout.js - Knockout Mapping Plugin 在表格中显示数据
我有来自 JSON 的数据:
我想将此数据显示到表头为Project Name
, Turbine
, Fault
,的表中Description
。
我也在使用 Knockout.js 和映射插件。这是一个JSFiddle 来展示我到目前为止的尝试。
我主要有两个目标
- 将此数据放入表中
- 每当故障状态更改时更新该行。每行由 ProjectName 和 Turbine 的组合唯一标识。
谢谢桑迪普。
我在尝试使用映射插件时遇到了这个声明的问题。
var viewModel = {};
viewModel.Stats = ko.mapping.fromJS(data);
你能告诉我我做错了什么吗?此外,当我收到数据更新时,以下语句是否有效?
ko.mapping.fromJS(data,viewModel);
由于映射插件不起作用,我不得不使用 ko.utils.Arraymap 函数。
谢谢