问题标签 [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.

0 投票
1 回答
124 浏览

knockout.js - 在已解析的模板中更改选择时更新模板

我有一个 Observable Array,在其中使用映射插件我在其上映射了来自服务器的 json。json结构是这样的:

此 json 包含有关不同类型对象的数据,并根据类别值确定在我的模板中显示和不显示的内容:

问题是每个项目的类别都可以从已解析的模板中更改,并且我们希望在发生此更改时更新模板。

我没有这个 ViewModel 的淘汰模型,我直接从服务器映射 json。

如何做到这一点?我试图使类别属性可观察,但这无济于事。

我必须补充一点,我刚开始使用 Knockout,我不知道它的全部功能。

0 投票
1 回答
3409 浏览

knockout.js - 将 DatePicker 与 Knockout 可观察数组一起使用

使用来自 Knockout的可编辑网格示例,并与Steve Sanderson 博客联系在一起,我试图让 DatePicker 或 datetimepicker 在可编辑网格中工作。我首先使用由Ryan Niemeyer设置的 datepicker 绑定,但这不适用于可观察数组。

所以代码看起来像:

与绑定:

任何帮助或示例将不胜感激。我知道这与可观察数组中的每个项目本身都不是可观察的有关,但是对于 Javascript 来说是新手,我不知道如何修复它。

我收到一个错误:Change 事件中的“字符串不是函数”。如果我添加一些代码来尝试使该字段可观察,如下所示:

然后 datetimepicker 工作,并正确更新浏览器,但数据没有发布,所以它没有更新由以下人员发布的实际礼品数组:

提前致谢。

0 投票
1 回答
413 浏览

knockout.js - 淘汰可观察数组 + 选择框

我正在尝试在带有可观察数组的选择框上设置选项。我可以获得要填充的选项,但是该数组显示为一个选项,并且现在我查看它也没有任何价值。

这是下面的小提琴和代码:

HTML:

0 投票
1 回答
427 浏览

javascript - 你可以修改一个可观察数组中的多个实体,但让 Knockout 只触发一个更改通知吗?

我有一个可观察的数组,我需要从中删除一个项目并添加另一个。如果我只是调用.remove(myItem)observable 数组,然后将我的新项目推送到它上面,Knockout 将为该数组触发两个更改通知,但在这种情况下,我宁愿将其视为单个更改,只触发一个通知。

我所做的是取出底层数组并将其保存在一个临时变量中,然后我对该临时变量进行修改,当我完成后,我将整个东西放回可观察数组中. 像这样的东西(从我实际做的有点简化):

虽然这实现了我的目标,但感觉不是正确的做法。

有没有更合适的方法来对可观察数组进行多次更改,但只触发一个通知?

更新:

我不想触发两个通知的原因是因为我订阅了数组上的更改,并在新数据发生更改时发出 AJAX 请求以加载新数据。因此,我不想触发不必要的通知。在我“完成”编辑数组之前,我不希望触发通知。

0 投票
3 回答
26238 浏览

javascript - 替换 observableArray 中的项目

我正在尝试observableArray用新内容替换项目的所有内容。

我也试过

但没有任何工作。正在正确检索索引,但没有更新项目。

0 投票
1 回答
972 浏览

knockout.js - 无法在 knockout.js mvvm 中访问 viewmodel 中的可观察数组来操作项目

我正在使用 Knockout.js、require.js 等开发 MVVM Web 应用程序。问题是我无法访问视图模型中属性(可观察数组类型)中的项目。

样本合同模型:

示例视图模型:

示例视图:

我需要在 viewmodel 中访问的是contract.shoppingItems,我得到的只是未定义的。

0 投票
5 回答
10230 浏览

javascript - Knockout Observable Array Length 始终为 0

在 customerOverview 视图模型中调用任何可观察的长度时,我收到的长度为零。当绑定随数据更新时,可观察对象中存在数据,但长度保持为 0。基本视图模型“CustomerCentral”正确返回长度。我需要'CustomerOverview'中一些可观察的长度来做一些条件语句。

HTML 绑定

JS

控制台 cmd:vm.customerOverview().contacts().length 0

- - - - - - - - - - - - - -解决方案 - - - - - - - - - - - observableArray.push()

问题原来是这一行:

解决方案:添加 .push() 可以增加数组的长度属性。我曾假设 ko.mapping 会处理这个问题,但事实并非如此。将变量更改为 observable 没有效果。

0 投票
1 回答
195 浏览

javascript - 带有 KnockoutJS 的 ClickToEdit 按钮

我正在创建一个自定义绑定,它将显示一个锚点,单击该锚点会变成一个文本框。一旦用户输入一个值并按下回车键,该值将被推送到传递给绑定的 observableArray 中。

大部分绑定取自 Ryan Niemeyers 示例 - 可在此处找到

html

捆绑

问题是在绑定到onEnter绑定的函数中,数据参数始终未定义,因此新值永远不会被推入数组。

请参阅我的小提琴以获取完整示例

0 投票
2 回答
1007 浏览

knockout.js - 在可观察到的淘汰赛中使用数组

我有绑定到 UI 上的 html 字段的可观察数组。

但是,UI 上这些字段的更改不会反映在视图模型中,因为根据 Knockout 文档,可观察数组跟踪数组中的对象,而不是这些对象的状态。

代码如下所示:

HTML 代码:

当我将对象添加或删除到可观察数组中时,会设置 viewmodel 脏标志,但是当我在 UI 上进行修改时,它不会被考虑。

其中一种方法是将普通数组放入可观察对象中。

是否有任何代码示例来说明这一点或任何更好的方法?

请帮忙。

0 投票
2 回答
3070 浏览

validation - 敲除可观察数组验证的问题

我对 observablearray 元素的验证规则有疑问。我正在使用自定义消息模板来显示错误,问题是当错误出现时它不会显示,但是,我可以在相关字段中看到“*”。以下是我的模型:

这是我正在使用的验证配置:

我的任何自定义消息模板都是这样的:

使用此实现,我在自定义模板中看不到验证消息。但是如果我删除配置 deep: true,它不会验证 observable 数组元素,而是另一个 observable(ID),然后消息会正确显示。

我对此感到非常困惑并且有点卡住了,如果有人可以提供帮助,我将不胜感激/

提前致谢。