问题标签 [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 回答
228 浏览

javascript - 为什么在 knockout.js 中向可观察对象添加属性后出现 TypeError?

我正在构建一个自定义处理程序,该处理程序将新的 observableArray-properties 添加到 MyViewModel 的某些部分,以确保由我的处理程序绑定的元素中的嵌套模板始终具有正确的数组 -有关完整示例,请参见 jsfiddle

在处理程序中,我检查了当前对象bindingContext.$data是否有一个可观察对象作为名称为valueAccessor()[0](在我的示例中为“孩子”)的属性,并且该可观察对象又是否具有它自己的可观察数组,其名称为valueAccessor()[1](“pos1”) - 如果缺席,我会评估他们。

起初我尝试了 valueHasMutated() 并重置了 observable,如下所示

这几乎奏效了——因为我不想每次推送一个值时都通知突变,我试图将它放在valueHasMutated()处理程序中——在添加之后,observableArray()但这会导致Uncaught TypeError: object is not a functiontypeof上面的 1 行另有说明 XD )。

我是否以根本错误的方式使用这些对象引用,或者只是对淘汰赛的魔力缺乏一些了解?:D

0 投票
1 回答
341 浏览

knockout.js - Knockoutjs observableArray 映射单值

我有一个带有可观察项目和一个按钮的 observableArray。当我单击按钮启动 ajax 请求时,我需要更新按钮相同行上的 velues。

谢谢

0 投票
1 回答
13552 浏览

arrays - 从可观察数组中获取第 n 个项目

我正在学习淘汰赛,并且有一个pdfs由 4 个项目组成的可观察数组。我需要项目的 HTML 输出如下所示:

我找到了一些参考的地方,data-bind="text: pdfs[nth].name"但如果我这样做,我会得到“未定义 pdf”或类似的信息。我意识到我可以使用两个 foreach 循环,<!-- ko if: $index() == nth -->但肯定有更好的方法吗?

这似乎是一些人想做的事情,所以我希望有一个强大的解决方案。我意识到我在这里谈论的是第一项(其他所有内容都可以在 中循环播放foreach),但我对整体感兴趣nth(如果我想说,第 3 项在某个特别的地方)。

*如果可能的话,我真的不想创建自定义绑定

0 投票
4 回答
643 浏览

jquery - 淘汰 observablearray 将不接受使用来自服务器的值更新的项目

我有一个带有剔除绑定的项目列表。简化它看起来像这样:

在选择列表中,我有可以添加到第一个列表的潜在项目。双击某个值时,将使用 selectedItem 启动 ajax 调用。

两个阵列都使用服务器上定义的相同模型结构。

视图模型如下所示:

带有 currentItems 的列表是从带有 ko.mapping 的 MVC 初始模型加载的。possibleItems 加载了来自动态 ajax 调用的值。但两者都按预期加载,所以我认为这些绑定没问题。

双击按预期触发。在服务器上检测到调用并返回适当的 itemId。成功返回时,应在 selectedItem 上设置该值。然后 selectedItem 应该被添加到 currentItems 数组并出现在第一个列表中。

我已经详细阐述了几次尝试,但没有成功。我当时尝试了其中一个,其他人发表了评论。

Attempt1:返回 itemId 但未到达第一个 hello。为什么?这不是设置可观察属性的方法吗?

Attempt2:设置值,显示 hello2 并报告设置了 itemId。但是推送调用不会使该项目出现在 currentItem 列表中。

Attempt3:相同的方法,但这次属性是在 viewModel selectedItem 上设置的。这次没有到达 hello3。

0 投票
1 回答
436 浏览

jquery - 将值推入嵌套的 ko.observableArray

我想根据 JSON 有效负载中的项目是否需要供应商,将供应商列表嵌套到我从服务器获取的现有 JSON 有效负载中。

我想要结束的是看起来像这样的东西:

我正在考虑使用 2 AJAX 调用将值推送到 Observable 数组中。

AJAX 调用 1:为产品创建初始有效负载

AJAX 调用 2:将值推送到供应商 ko.observableArray() 在第一个有效负载中创建

但这不起作用。它创建了初始有效负载,但没有获得第二个有效负载并将其推送到我创建的 observableArray 中。

任何建议将不胜感激

0 投票
1 回答
1430 浏览

javascript - 淘汰赛:在 simpleGrid 示例中选择

我正在使用此处找到的淘汰赛简单网格:http: //knockoutjs.com/examples/grid.html

我希望能够在网格中添加一个选择,该网格具有分配给我的 vm 中的对象数组的数据绑定属性。

因此,我从示例中添加了另一列:

并将控件中的 text 属性更改为 html:

选择出现,但没有填充我的对象数组中的数据。

JSFiddle 在这里找到:http: //jsfiddle.net/vwj2p/1/ (我已经粘贴了上面简单网格中的代码,因为我对 simplegrid 代码进行了更改)。

0 投票
1 回答
6762 浏览

javascript - 将新对象添加到敲除可观察数组

我正在使用 John Papa 的 SPA 源代码来制作我自己的应用程序。我现在有一个问题,我想向我的可观察数组添加一个新对象。我发现这很困难,因为在我的代码中有办公室和联系人数量的循环。因此,当我将一个元素添加到我的 KO 可观察数组时,我想将它添加到正确的位置。

当我点击:

我想要一个带有空文本框的新 tr 供用户输入数据。

所以我正在推动一个新元素

在功能

但我得到这个错误:

有谁知道将新数组添加到多维 ko 可观察数组的好方法?

0 投票
1 回答
658 浏览

javascript - 如何添加到淘汰赛可观察数组的嵌套子项

我有一些代码可以添加到敲除可观察数组中,我正在将可观察数组转换为对象,取消移动新对象,然后将该对象映射回视图模型。这有效,但似乎很慢。大约需要 2-5 秒或更长时间。

我尝试添加到我的可观察对象而不是执行转换过程,但出现此错误:

这是导致错误的代码

请参阅我的屏幕截图以了解代理机构的外观:

我的全局可观察数组

添加到这个可观察数组的正确方法是什么?据我了解,最新价值是一种跟踪变化的机制,所以我不应该篡改它?

0 投票
1 回答
2690 浏览

knockout.js - 使用 JQuery 拖放操作敲除 observableArray 绑定:不良行为

我在一个容器 div 中有一些 div 使用foreach绑定绑定到一个淘汰赛 observable 数组。这很好用。

在淘汰赛 afterAdd 事件中,我使用 jQuery 为(新创建的)div 的点击事件创建监听器:

单击 div 将其删除。div 从视图中消失。这很好用。

我也让每个 div 都可以拖动:

拖放工作正常。

但是,如果我在将 div拖放到 droppable 后单击它,它不会消失;它要么依附于可放置对象,要么可放置对象依附于它。需要再次单击 div 才能将其发送到遗忘状态。

我能做些什么来解决这种行为吗?

0 投票
3 回答
1747 浏览

knockout.js - 如何在敲除中绑定单击上下文菜单,以便知道打开菜单的元素

我有一个使用 foreach 绑定到 containerDiv 的 observableArray 绑定。随着新项目被添加到可观察数组中,新的 div 会在容器内创建。

每个动态创建的 div 都可以被点击(或点击),它会显示一种自制的上下文菜单,有几个选项,其中两个是“删除你刚刚点击的 div”ahd“改变你的 div 的值刚刚点击”。

contextmenu 可以确定点击了哪个 div,从而可以确定 observableArray 中的哪个索引必须删除或更改其值。但是上下文菜单是如何将这些信息传回给 ViewModel 的呢?

绑定 context-menu-option 的 click 事件只会告诉 ViewModel 点击了哪个菜单项;它不会显示另一条重要信息,即负责打开上下文菜单的 div,即必须编辑或删除的那个。

如何为 ViewModel 提供 a) 必须发生的特定操作(菜单选项)和 b) 可观察数组中必须执行的项?