问题标签 [computed-observable]
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.
javascript - 为什么以下 Ember.js 代码不更新给定列表?
我一直在用 ember 尝试一些东西,我最近的测试是根据外部事件更新列表。我已经得到了一些其他的解决方案,但我想出的一个(它不起作用 - 因为我不知道的原因)是:
如果有人能告诉我为什么这不起作用,那就太好了。
谢谢,杰森
javascript - 为什么函数的行为类似于计算函数?
给定以下 HTML/JS ( http://jsfiddle.net/mgs_jsfiddle/gUhm2/ )
显示一个列表。通过单击一行,该行的 id 存储到selectedId
.
我不明白,为什么在更改isSelected
时重新评估功能。selectedId
毕竟,这不是计算出来的。为什么还要重新评估?
knockout.js - Cannot write a value to a ko.computed unless you specify a 'write' option
I am trying to use computed properties in another computed properties and when i run code i am getting following error in console.
Cannot write a value to a ko.computed
unless you specify a 'write' option
and here is html code and js fiddle link
knockout.js - 淘汰赛js计算运行平衡无限循环
拥有一组可观察的银行交易,其中包含金额等。
我试图保持一个可计算的运行平衡,但我似乎陷入了无限循环和各种不良情况。
这是我能想到的最简单的小提琴 - http://jsfiddle.net/Nnyxx/2/
JS:
HTML:
它仍然不完整,因为我最终围绕如何让期初余额显示和重新计算。
流动余额需要是可观察的,因此如果期初余额或交易发生变化,它将重新计算。
期末余额也需要是最终的流动余额。
knockout.js - 创建一个类似于 observableArray 的计算 observable?
目前我有一个类似于以下计算的可观察值:
但是,我希望能够将这个计算出的 observable 视为一个observable 数组,以便我可以调用obs.push(..)
等等。
破解这个有点微不足道,但感觉不对,我不想复制所有现有的可观察数组方法。
此外,我可能会遗漏可观察数组和可观察数组之间的关键区别。
knockout.js - 如何强制限制的 observable 立即更新?
我通过将其可见性绑定到一个可观察的命名来在我的 UI 上显示或隐藏一个“加载”指示器waiting
,它的定义如下:
我正在限制waiting
observable,因为我不希望出现加载消息,除非请求花费很长时间(在这种情况下 > 500 毫秒),以提高应用程序的感知速度。问题是,一旦长时间运行的请求完成,加载指示器直到另外 500 毫秒过去后才会消失。相反,当最后一个未完成的请求完成时,我想立即waiting
翻转为 false 。
我第一次尝试使用 进行修复valueHasMutated()
,但更新仍然延迟。
如何绕过油门扩展并强制waiting
立即更新?
javascript - 如何在运行时向计算的 observable 添加额外的数组项
我试图在没有运气的情况下将附加值附加到计算出的可观察到的淘汰赛中。希望有人能指出我正确的方向。目前我正在遍历字段集合并构建日期数组
一旦我建立了数组,我想添加一个额外的项目
但是,计算的 observable 不支持推送。谁能提供一些关于如何在对象初始化期间插入附加值的建议?
提前致谢,
javascript - 在 Knockout 中绑定可能是多种数据类型的属性
所以我有一个自定义的淘汰赛绑定来处理持续时间。我有一个问题,我的一个表单中的值可能是持续时间,但也可能是字符串或其他值。问题源于持续时间值表示为具有两个属性的对象,持续时间和 time_unit (它本身就是一个具有 2 个属性的对象。我在 if 绑定中绑定了各种绑定节点。
还有我绑定的 html
如果我使用 value 进行初始绑定是正确的对象格式,就像这样
一切都很好。但是,如果我从其他格式的值开始,例如..., value: 'nada', ...
尝试访问 observable.duration (和 observable.time_unit.*)时会中断。
当我用正确的设置评估价值时,我把上面描述的对象拿回来。如果我尝试手动将 duration/time_unit 属性添加为 observables,我仍然只是将空字符串取出。
我如何最好地从我的 init 函数内部更新视图模型/绑定/等,以便它的行为就像我初始化模型时最初处于该状态一样?
javascript - 计算的 observable 没有收到更改通知
在此JSFiddle中可以看到所有即将跟随的代码。我已经从这个问题中遗漏了 HTML 数据绑定和模板,但它们可以在小提琴中看到。我认为它们与说明问题无关。
介绍
我正在尝试将计算的 observable 链接到我用作 HashMap 的另一个对象。
具有计算的 observable 的对象是HistoryEntry
:
HistoryEntry
包含一个用作我的UserId
JavaScript 对象中的查找值的 HashMap。users
是对 ViewModel 中包含的此 HashMap 的引用。
HashMap 包含User
由它们的键控的对象UserId
。User
对象如下:
这个想法是计算出的 observableHistoryEntry.User()
将从User
这个 HashMap 中的相应对象中查找名称。
HashMap 与可观察的对象数组一起存储在父 ViewModel 上HistoryEntry
:
问题
正如您在上面看到的,我只创建了两个用户,但我有三个历史条目,每个都指向不同的用户。这些条目之一是指 HashMap 中尚不存在的 User(18)。
对于我的示例,我将 User(16) 的名称从“Jack”更改为“John”并添加 User(18):
这会正确更新HistoryEntry
具有指向 User(16) 的计算 observable 的。
同样,我希望当我添加 User(18) 时,对 User(18)HistoryEntry
的计算 observable 将使用 User(18) 的名称进行更新。
不幸的是,事实并非如此。
问题
- 我想更深入地了解为什么
HistoryEntry
指向 User(18) 没有收到更改通知,因为 User(18) 确实存在。 - 此外,我需要找到一个解决方案,在将
HistoryEntry
User(18) 添加到用户 HashMap 时更新指向 User(18) 的解决方案。
arrays - 具有排序和 Foreach 数据绑定的 Knockout Observable 数组
我有一个对象数组,它们连接到一个淘汰赛可观察数组中。我需要对这些数组应用排序,我遇到了一些有点令人困惑的行为。
我的第一次尝试涉及在 foreach 数据绑定中应用排序。
http://jsfiddle.net/wnfXV/
<ul data-bind="foreach: people.sort(function(l,r) { return l.name == r.name ? 0 : (l.name < r.name ? -1 : 1)})">
这执行了正确的排序,但我失去了从数组中动态添加/删除元素并更新 DOM 的能力。
如果我添加一组括号来访问底层 JavaScript 数组,一切正常。
<ul data-bind="foreach: people().sort(function(l,r) { return l.name == r.name ? 0 : (l.name < r.name ? -1 : 1)})">
根据我找到的一些 SO 答案,我最终为排序数组创建了一个计算的 observable。 http://jsfiddle.net/wnfXV/2/
这也有效。而且我什至不需要将数据绑定到计算出的 observable,因为它会立即执行。我可以推送和删除数组项,并适当地更新 DOM。
但是,如果我将代码更改为:
现在,我可以将项目推送到数组和 DOM 更新,但数据没有被排序。
我认为这些差异与剔除依赖跟踪有关,以及在可观察数组上操作与其下面的本机 JavaScript 数组之间的差异,但我很难概念化为什么行为会发生变化。我能够让它工作,但我也很好奇什么被认为是最佳实践。
谢谢你的帮助。:)