问题标签 [knockout-3.0]

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 投票
2 回答
149 浏览

knockout.js - 何时在 Knockout.js 中创建新视图模型

我看到在 knockout.js 中讨论多个视图模型时通常会有些混淆

ko 文档并没有真正解释如何处理多个视图模型,如何在它们之间进行通信或何时应该考虑它们。

我发现这个网站解释了创建多个视图模型的不同方法以及如何与它们交互。

我试了一下,创建了一个包含不同子模型的主模型:

在那之后,我发现自己不得不with: nameOfModel在很多地方使用(并为其创建额外的包装器或 HTML 注释),甚至只是使用视图模型的名称作为前缀data-bind="foreach: orders.getList()"

除此之外,还有它们之间的通信问题,虽然可以通过某种方式解决,但似乎不像处理单个视图模型那么简单。

我的问题是,是否值得创建多个视图模型?如果有,什么时候?似乎它只会增加更多的困难,而我最终并没有看到它的优势。(是的,他们说它保持模块化......但我最终没有看到明显的优势)

0 投票
1 回答
1704 浏览

javascript - 淘汰赛:在 foreach 循环中使用 select 在所有选择中选择相同的确切值

我最近才开始(实际上是我的第一个项目)使用 Knockout 并且非常喜欢它。

但是我遇到了一个问题,我似乎无法自己解决。

我有一个在另一个 foreach 循环中运行的选择下拉菜单。

一切看起来都不错,但是当我在其中一个下拉列表中选择时,它会自动在所有下拉列表中选择相同的值。

例如,如果我选择值“删除”,那么该 foreach 中的所有下拉菜单都将在“删除”值上被选中。

我非常感谢您对此的帮助。

这是相关的 JavaScript(FoldersFileBrowserViewModel 中还有更多内容,但我删除了多余的代码)和 HTML 代码

先感谢您。

0 投票
0 回答
986 浏览

jquery - KnockoutJS:以编程方式滚动到 observableArray 中的元素

我正在尝试在 KnockoutJS 中找到一种滚动到列表项(或任何相关内容)的方法。

我所拥有的只是列表中的一个对象/ID,我希望滚动到该列表。

我已经将我试图在下面实现的功能(和简化)版本放在一起。

演示:http: //jsfiddle.net/qczdvkat/

JavaScript:

HTML:

CSS:

虽然上述方法有效,但我正在寻找一种更清洁/更多 KnockoutJS并且不涉及我正在使用的 jQuery/data-* 属性的方法 - 因为它违反了 MVVM 原则。

我想问题的根源归结为:如何从渲染列表/树/等中的特定对象获取 DOM 元素?

虽然我在 StackOverflow 上找到了一些资源,但我所看到的都没有解决这个特定的问题。

0 投票
1 回答
930 浏览

javascript - 使用按 id 选择 selectedIndex 匹配项的剔除过滤项

我想根据汽车品牌加载第二个选择。我将 selectedIndexes 绑定到 ko.observable() 变量。我知道我可以通过使用 optionsValue : 'id' 并将值绑定到 observable 来实现这一点,但我需要在我的项目中使用 selectedIndex 。谢谢

jsfiddle http://jsfiddle.net/diegopitt/xg8q5esu/

我的视图模型:

HTML:

0 投票
1 回答
83 浏览

knockout.js - 推迟重新排序快速更新的敲除数组元素

我正在快速更新排序的 Knockout 数组的内容,发现我实际上无法与快速更新的项目进行交互。这是一个大大简化的示例:

我的意图是首先订购最近更新的链接,在这里用随机更新进行模拟。直接更新,model.links()[0].name('...')允许我点击项目上的链接,但我也想支持重新排序。

尝试与快速更新的数组交互是一种非常糟糕的用户体验,所以我认为最好的解决方案是推迟对列表中的元素重新排序,直到用户不再将鼠标悬停在它上面,从而将显示的数组与数据数组解耦。其他列表元素仍应围绕固定的活动元素重新排序。

在 Knockout 中有什么简单的方法可以做到这一点吗?是否有任何现有的插件可以做到这一点?

0 投票
1 回答
8713 浏览

knockout.js - 使用 knockout.js (valueUpdate) 在输入更改时调用函数

当我的输入值更新时,我试图调用一个函数。该函数将验证输入值并将标志设置为 true 或 false,这将用于 DOM 中的多个元素。

我一直在这里尝试建议的解决方案:

但它似乎不适用于afterKeyDown。它只在 unfocus 上调用函数,如您在此处看到的:http: //jsfiddle.net/imac/hY5T2/142/

我究竟做错了什么?

0 投票
0 回答
78 浏览

javascript - Knockout JS:控制 ViewModel 中自定义对象的序列化

我最近在一篇博文中看到了这个小宝石,它概述了一种在 KnockoutJS 中控制对象序列化的好方法。

但是,我试图将此原则应用于在主 ViewModel 上形成属性的自定义对象。

例如(从引用的链接中提取的部分):

正如你所看到的,序列化Person是通过原型toJSON覆盖控制的,这完美无缺。

但是,您还会注意到自定义类型Person有两个属性。ko.educationVariable

我希望所有这些属性都被相应的覆盖序列化ko.educationVariable.prototype.toJSON- 但这不起作用。

由于看起来这个覆盖功能不适用于“嵌套”,除了将所有逻辑移动到主 ViewModel 的 toJSON 覆盖之外,还有其他方法可以控制特定对象的所有实例的序列化吗?

0 投票
2 回答
1226 浏览

knockout.js - 从 knockout.js 中的外部主视图模型调用函数

我见过类似的 主题,但没有一个使用与我完全相同的结构。

我正在使用多个视图模型,我通过创建一个 MasterModel 函数来处理它,稍后我将其作为参数传递给applyBindings.

基本上是这样的:

现在,我希望能够从 Javascript 访问我的一个视图模型中的函数,但我遇到了麻烦。

如果我将其更改为以下内容,我设法调用了 viewmodel 函数applyBindings

但后来我发现以下内容停止工作:

消息:部门未定义

在线复制

正如您在此处看到的,它在使用时完美运行ko.applyBindings(MasterModel);

有什么解决办法吗?

0 投票
1 回答
1724 浏览

knockout.js - 在 knockout.js 中的数组内创建可观察对象属性

Knockout.js 文档说observableArray

简单地将一个对象放入 observableArray 并不能使该对象的所有属性本身都可观察。当然,如果您愿意,您可以使这些属性可观察,但这是一个独立的选择。

但它没有指定如何使属性可观察。

我有一个数组,users我想让属性name可观察,以便能够在某些操作下从另一个视图模型更改它。

这是我尝试过但没有成功的方法:

在线复制

我怎么能做到?

0 投票
2 回答
1205 浏览

javascript - knockout.js 3.3 - 在 foreach 绑定中重新渲染组件

我的 viewModel 由带有可观察元素的可观察数组组成。

我需要更改这些元素的值。为此,我创建了组件。它的简单示例如下:

该组件可以更改 params.value 中可观察元素的值。

我的看法很简单:

完整示例: http: //jsfiddle.net/tselofan/xg16u5cg/7/ 问题是当可观察数组中可观察元素的值发生更改时,组件会再次呈现,因为它位于 foreach 绑定内部。您可以在日志中看到这一点。在这种情况下,我可以使用什么最佳做法?谢谢