问题标签 [ko.observablearray]
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 - 在已解析的模板中更改选择时更新模板
我有一个 Observable Array,在其中使用映射插件我在其上映射了来自服务器的 json。json结构是这样的:
此 json 包含有关不同类型对象的数据,并根据类别值确定在我的模板中显示和不显示的内容:
问题是每个项目的类别都可以从已解析的模板中更改,并且我们希望在发生此更改时更新模板。
我没有这个 ViewModel 的淘汰模型,我直接从服务器映射 json。
如何做到这一点?我试图使类别属性可观察,但这无济于事。
我必须补充一点,我刚开始使用 Knockout,我不知道它的全部功能。
knockout.js - 将 DatePicker 与 Knockout 可观察数组一起使用
使用来自 Knockout的可编辑网格示例,并与Steve Sanderson 博客联系在一起,我试图让 DatePicker 或 datetimepicker 在可编辑网格中工作。我首先使用由Ryan Niemeyer设置的 datepicker 绑定,但这不适用于可观察数组。
所以代码看起来像:
与绑定:
任何帮助或示例将不胜感激。我知道这与可观察数组中的每个项目本身都不是可观察的有关,但是对于 Javascript 来说是新手,我不知道如何修复它。
我收到一个错误:Change 事件中的“字符串不是函数”。如果我添加一些代码来尝试使该字段可观察,如下所示:
然后 datetimepicker 工作,并正确更新浏览器,但数据没有发布,所以它没有更新由以下人员发布的实际礼品数组:
提前致谢。
javascript - 你可以修改一个可观察数组中的多个实体,但让 Knockout 只触发一个更改通知吗?
我有一个可观察的数组,我需要从中删除一个项目并添加另一个。如果我只是调用.remove(myItem)
observable 数组,然后将我的新项目推送到它上面,Knockout 将为该数组触发两个更改通知,但在这种情况下,我宁愿将其视为单个更改,只触发一个通知。
我所做的是取出底层数组并将其保存在一个临时变量中,然后我对该临时变量进行修改,当我完成后,我将整个东西放回可观察数组中. 像这样的东西(从我实际做的有点简化):
虽然这实现了我的目标,但感觉不是正确的做法。
有没有更合适的方法来对可观察数组进行多次更改,但只触发一个通知?
更新:
我不想触发两个通知的原因是因为我订阅了数组上的更改,并在新数据发生更改时发出 AJAX 请求以加载新数据。因此,我不想触发不必要的通知。在我“完成”编辑数组之前,我不希望触发通知。
javascript - 替换 observableArray 中的项目
我正在尝试observableArray
用新内容替换项目的所有内容。
我也试过
但没有任何工作。正在正确检索索引,但没有更新项目。
knockout.js - 无法在 knockout.js mvvm 中访问 viewmodel 中的可观察数组来操作项目
我正在使用 Knockout.js、require.js 等开发 MVVM Web 应用程序。问题是我无法访问视图模型中属性(可观察数组类型)中的项目。
样本合同模型:
示例视图模型:
示例视图:
我需要在 viewmodel 中访问的是contract.shoppingItems
,我得到的只是未定义的。
javascript - Knockout Observable Array Length 始终为 0
在 customerOverview 视图模型中调用任何可观察的长度时,我收到的长度为零。当绑定随数据更新时,可观察对象中存在数据,但长度保持为 0。基本视图模型“CustomerCentral”正确返回长度。我需要'CustomerOverview'中一些可观察的长度来做一些条件语句。
HTML 绑定
JS
控制台 cmd:vm.customerOverview().contacts().length 0
- - - - - - - - - - - - - -解决方案 - - - - - - - - - - - observableArray.push()
问题原来是这一行:
解决方案:添加 .push() 可以增加数组的长度属性。我曾假设 ko.mapping 会处理这个问题,但事实并非如此。将变量更改为 observable 没有效果。
knockout.js - 在可观察到的淘汰赛中使用数组
我有绑定到 UI 上的 html 字段的可观察数组。
但是,UI 上这些字段的更改不会反映在视图模型中,因为根据 Knockout 文档,可观察数组跟踪数组中的对象,而不是这些对象的状态。
代码如下所示:
HTML 代码:
当我将对象添加或删除到可观察数组中时,会设置 viewmodel 脏标志,但是当我在 UI 上进行修改时,它不会被考虑。
其中一种方法是将普通数组放入可观察对象中。
是否有任何代码示例来说明这一点或任何更好的方法?
请帮忙。
validation - 敲除可观察数组验证的问题
我对 observablearray 元素的验证规则有疑问。我正在使用自定义消息模板来显示错误,问题是当错误出现时它不会显示,但是,我可以在相关字段中看到“*”。以下是我的模型:
这是我正在使用的验证配置:
我的任何自定义消息模板都是这样的:
使用此实现,我在自定义模板中看不到验证消息。但是如果我删除配置 deep: true,它不会验证 observable 数组元素,而是另一个 observable(ID),然后消息会正确显示。
我对此感到非常困惑并且有点卡住了,如果有人可以提供帮助,我将不胜感激/
提前致谢。