问题标签 [knockout-3.2]

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 回答
143 浏览

knockout.js - 为什么这个 observable 在传递到组件时会变成计算/依赖?

我有一个简单的模型,上面有一个可观察的(“model.thing”)。然后我在这个(“someProp”)上设置了一个额外的可观察对象并将它传递给组件的参数。

在这一点上,observable 已经成为一个计算值,我不知道为什么。

如果我更改模型,而不是将其model.thing作为一个可观察对象,而是将其作为一个简单的对象,然后将其传递进去,它就会通过而不会变成计算...

有人对这种行为有解释吗?

这是一个工作示例(它会提醒参数表明它已成为计算值)。

http://liveweave.com/MozLiW

0 投票
2 回答
148 浏览

knockout.js - 将模板传递到自定义敲除绑定

我想做一个弹出框(引导程序)自定义绑定。

我已经这样定义了:

问题是,我不确定如何注入我想要的 html。自然我想要一个模板路径来解决,但使用需要文本!插件没有我希望的那么好。

我怀疑我忽略了一些更简单的东西?

0 投票
1 回答
797 浏览

javascript - 使用 knockout.js 将嵌套 JSON 显示为嵌套列表

我有一个这样的嵌套 JSON:

我想将它作为无序列表显示在 html 页面上,如下所示: 项目符号列表

但我看到最后一项重复了多次:

在此处输入图像描述

这是带有 knockout.js 绑定的 html:

testResults是包含上述 JSON 的视图模型中的 ko.observableArray()。

什么是只显示一次叶子元素的正确方法

0 投票
1 回答
467 浏览

knockout.js - 在敲除.js 中 foreach 完成后触发操作

我已经看到了这个问题和关于这个主题的另一个问题,但它们似乎都没有解决我的问题。

我正在尝试为表的每一行中的元素初始化一个 javascript 插件(BootStrap javascript 工具提示)。

为此,表格必须在 DOM 中呈现。这就是问题所在。据我所知,knockout.js 没有提供正确的方法来知道 a 何时foreach渲染了整个表格。

我试图通过应用我发布的第一个链接中提供的解决方案来解决它,即通过创建自定义绑定,但这在我的情况下不起作用。我猜是因为数据是通过从 AJAX 调用调用 API 来显示的。

问题的再现

我不希望在案例中使用afterRenderKnockout.js 提供的回调,foreach因为这样插件必须在每次迭代时初始化,而不是最后一次。

我找到的唯一解决方案是setTimeout在应用工具提示插件之前应用 , ,但这远非理想:

另一种解决方案是在从 API 获取数据后调用tooltip插件:

有没有更好的方法呢?

0 投票
2 回答
149 浏览

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

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

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

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

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

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

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

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

0 投票
1 回答
8713 浏览

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

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

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

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

我究竟做错了什么?

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 回答
4515 浏览

knockout.js - 在 knockout.js 中动态加载视图/模板

我有一张桌子,我想以两种不同的方式展示它。不同的列数及其内容和单元格的位置。我想为用户提供一种只需单击一个按钮即可从一个视图更改为另一个视图的方法。

我开始只是使用visible绑定来做这件事,但后来我意识到这不是正确的做法,因为内容只是,invisible但它仍然被加载到 DOM 中。我在后台复制内容并生成无效的 HTML(id例如,两个表中的重复属性),这在 jQuery 端产生了问题。

然后我看了一下使用敲除模板来完成它,就像在这个例子中一样,它解决了我以前的问题并且它有效,但是在标签内使用 HTML<script>对我来说听起来不是最干净的解决方案。

我不太确定使用组件是否可以为这种情况提供任何解决方案,我找不到。

关于如何处理这个问题的任何建议?

0 投票
2 回答
1086 浏览

javascript - 使用没有视图模型 .JS 文件的淘汰组件?

我正在尝试创建一个淘汰赛组件并从如下文件加载其模板:

我收到以下错误:

加载资源失败:服务器响应状态为 404(未找到) https://localhost/views/orders/compactTable.html.js

似乎它正在寻找文档中详述的 .js :

为此,文件files/component-like-widget.jsfiles/component-like-widget.html需要存在。

有没有办法使用组件而不必在另一个文件中分离视图模型?

我正在使用 MasterModel 能够从任何其他视图模型调用其他视图模型函数,并且可能将它们分开ordersViewModel在另一个文件中会使事情变得更加困难。