问题标签 [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 - 如何使用 knockoutjs 绑定父对象的属性?
我正在开发一个带有 knockout.js 框架的应用程序。我有一个这样的视图模型:
当我运行我的应用程序时,我得到一个这样的异常:
0x800a01b6 - JavaScript 运行时错误:对象不支持属性或方法“CountryCode”
你能帮我解决我的问题吗?
非常感谢你,马可
javascript - viewModel 使用 knockout.js 在原型上计算函数
我正在使用 knockout.js 库,它有助于数据绑定。因此,我不断收到错误消息,即我的变量未在我们 viewModel 原型上的计算函数中定义。我知道这是因为计算函数正在将“this”的上下文更改为窗口,但我似乎无法弄清楚如何让它变回根(viewModel)。我指的方法是javascript中的“消息”。话虽如此,我如何将上下文更改回视图模型?
这是我的代码:
HTML
JAVASCRIPT
我已经尝试将上下文更改为如图所示的“viewModel”、$root 和“this”。
如果您想知道该方法试图完成什么,当单击 NEW MESSAGE 按钮时,它将触发一条消息显示。然后,如果<td>
单击 ,它将在前一个位置显示不同的消息。
knockout.js - 如果依赖项位于错误分支语句中,Computed 将永远停止触发
我遇到了一个问题,即我的计算出的 observable 在一系列依赖项更改后停止触发。最后我发现了一点:如果在最近一次评估期间依赖关系在错误的分支语句中,那么即使在评估完成之前条件变为真,下次也不会触发计算。这是一个示例:https ://jsfiddle.net/sgs218w0/1/
是错误还是功能?您知道此问题的任何解决方法吗?我似乎在优化,但对我来说它看起来很激进且不正确。(编辑:我改变了主意。这是合理的,但有时会导致一些问题。我认为淘汰赛应该有解决这个问题的选项)
PS如果您需要,我可以发布更详细的真实代码示例以使问题更具体。但是真正的代码点是一样的。
更新 好吧,我必须不那么懒惰地提供更详细的示例来说明我想要实现的目标。我喜欢自动进行 ajax 调用的计算的想法。描述在这里。我看到的一个缺点是即使 UI 的相应部分不可见,也会进行调用。我试图以这种方式修复它:https ://jsfiddle.net/bpr88bp3/1/ 。问题是一旦选项卡被取消激活它就不能再被激活,因为计算停止触发......
javascript - Angular2 版本的淘汰赛计算的 observable
我目前正在将一些我从 Knockout 编写的代码移植到 Angular2。我真的很喜欢淘汰赛中计算的可观察对象的构造,这意味着该函数的结果仅在它依赖于变化的可观察对象时才计算。
我知道我可以使用角度函数,它只会在结果发生变化时更新视图(即使它会多次计算结果),但我的计算正在进行排序,这就是为什么我只希望完成工作当输入实际发生变化时。
我在下面找到了解释如何使用 angularjs 的链接,但我不确定如何将其转换为 angular2(打字稿)
http://www.jomendez.com/2015/02/06/knockoutjs-computed-equivalent-angularjs/ KO.Computed 等效于 Angular / Breeze Initializer
knockout.js - 设置计算的初始值或抑制第一次评估
[这似乎是不可能的。这个问题我以后会自己回答]
这个问题在很大程度上延续了我之前的问题。我使用“异步计算”方法来刷新页面的某些部分。感谢 Michael Best,我解决了 UI 不可见部分的更新问题。但是还有一件烦人的事情。如何将初始(默认)值设置为计算的 observable?我尽量避免在页面加载期间多次调用 ajax。而不是它,我将 json 嵌入到页面中以一次加载所有内容。看起来微不足道(常见)?但我不能抑制对我的异步计算的第一次评估。所以无论如何都会进行ajax调用。我可以使用这种方法:
但我面临同样的问题,就像在上一个问题中一样:这个计算永远不会订阅evaluator
更改,因为方法淘汰赛用于重新评估计算的 observables。来自类似问题的建议有效,因为它会检查之后 var value = self.product() * self.quantity();
的第一次评估。所以计算总是跟踪product
和quantity
。我不能使用这种方法,因为我不能evaluator
仅仅为了关心依赖而打电话,因为evaluator
可以进行 ajax 调用......
是否存在任何方法来抑制计算(或纯计算)的第一次评估?或者也许是设置初始值的方法? 有什么建议么?其他解决方法?
knockout.js - 淘汰可写计算导致不必要的“读取”调用
计算的读/写问题:“写”导致“读”执行。
我有读/写计算(或者也可以是纯计算)。它是可写的,因为它可以从 startDate 和 endDate 计算出来。但是,它也可以直接设置,因此它是“可读的”并且基于值 startDate 和 endDate 被设置。这是我的模型的简化版本:
用户点击 UI 触发self.timePeriodChange
功能。结果在控制台中我看到以下内容:
因此,执行“写入”部分,但是,当我更改 startDate 和 endDate 时 - 每次也执行“读取”部分。我看到这是因为写入更新读取 - 但如果我不希望这样怎么办?如何处理这种情况?
建议是使用 peek,但这会导致其他问题(可观察到的未更新)。这是我的提琴手:https ://jsfiddle.net/o5kacas3/ (更改下拉列表,不会更改在 UI 上计算的实际值,即使执行写入部分也是如此)。
knockout.js - 如何在淘汰赛 JS 变量中分配未定义的值?
我有 2 个下拉列表和一个结果列表,使用计算的可观察函数进行绑定,如下所示:
但我的问题是,当我更改 dropdownlist2 的值时,我需要在 self.dropdown1 上设置 undefined 值,因为我的记录集合可以更改。
我正在使用 jquery 更改第一个下拉列表的值,如下所示:
但绑定并不令人耳目一新。请提供任何建议。
knockout.js - 计算的 observable 不更新 UI
我的淘汰赛网络中的计算变量有问题。这是我的代码:
所以,我只收到一个带有座位的数组,我想为数组中的每个对象添加一个字段,以便在 UI 中显示为“已选择”。
我从 ajax 中读取了原始会话和席位的信息,当我更新它们时,我的 UI 没有任何变化。
为什么会发生?然后,我需要做什么来更新我的 UI?
谢谢!
编辑
Seat 不是 ViewModel ......应该是吗?
knockout.js - 如何在淘汰赛中根据列表项的属性计算 2 个列表?
作为一个学习练习,我有一个待办事项列表。在我看来,我想显示按完成分组的项目。下面是我的视图模型。我将如何去做我想要实现的目标,如何设置计算的 observables?