问题标签 [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.

0 投票
4 回答
1502 浏览

javascript - 继承和覆盖 Knockout 计算 observable

我一直在努力使我的 javascript 应用程序更具可扩展性。该应用程序使用 knockout.js 绑定某种类型的数据库项目的网格,以供用户编辑和更新。我现在正在使用继承并拥有一个 BaseModel 和从中继承的模型。当我想覆盖一个由继承自它的类在 BaseModel 中定义的计算 observable 时,我遇到的问题就出现了。这是用例。

基础网格有一个 UI 绑定到的计算 observable。计算出的 observable 使用带有文本框过滤器的 observable 数组,用户可以键入该过滤器进行搜索。很基本。

子类角色是一种特定类型的网格,部分业务需求是为部门提供过滤器。这是 UI 中的下拉菜单。我想用子类中的角色实现覆盖基类中计算的可观察者。不知道如何做到这一点。

这是一个 JSFiddle:http: //jsfiddle.net/Icestorm0141/vx6843pt/6/

BaseGridViewModel:

儿童班:

过去几天我一直在对此进行大量研究,但我很惊讶我还没有找到解决方案。我不觉得我做的事情太特别了,但也许有人有一些建议。我对任何人都开放!

0 投票
2 回答
198 浏览

javascript - Knockout 如何计算相关 observables 的 observable register?

当我们在 Knockout 中声明一个计算的 observable 时,我们所要做的就是传递一个函数,该函数将在该函数包含的 observable 之一更新时更新这个计算值。

示例,来自 Knockout 文档:

我的问题很简单,但我没有找到任何相关信息:计算如何知道传递的函数中包含哪些可观察对象?它是否在初始化过程中执行一些反射之类的动作来发现它们?

我不是 JS 大师,所以也许我遗漏了一些明显的东西,但如果有人能指出一条信息......

0 投票
2 回答
826 浏览

knockout.js - Wait with executing ko.computed until applyBindings

Say you have a view model with a circular dependency. I know you should avoid this in normal circumstances, but for this case assume you can't because it's out your control. A parent and a child refer to each other. Below is for brevity a very simplified example:

Html:

JS:

JS Fiddle

The problem is that ko.computed is executed the first time it is initialized. If it would only execute at the moment of applyBindings everything would be perfectly fine.

One solution would be to remove ko.computed altogether and just use a plain normal function. Those are only executed at the moment of applyBindings. Problem is of course that you lose all the other advantages of ko.computed, like losing the caching functionality etc.

Is there a way to say that a computed observable only starts initializing at the applyBindings phase?

0 投票
1 回答
429 浏览

knockout.js - ko.computed 在闭包函数中声明时无法访问 observables

我创建了以下模型,但我不明白为什么 pureComputed 可观察ApprovalIconCSS无法从其函数上下文访问 Approved() 可观察对象。

欣赏是否有人可以阐明为什么无法访问上下文。干杯!

0 投票
1 回答
140 浏览

javascript - 在不重置对象的情况下重新计算 Computed Observable

我最近开始玩 Knockout,但遇到了一个问题。我已经尝试以各种方式谷歌搜索,但我找不到任何适用的结果。

假设我有这个模型:

在 HTML 中,我与Parameters计算的 observable 绑定,但是每次Queryobservable 更改和Parametersobservable 重新计算时,我都会丢失该计算项的所有状态。

我的意思是,如果我在 HTML 中绑定一个 foreach,Parameters并且我在该 foreach 中有一些输入框,例如:

一旦重新计算 Computed Observable,用户在输入中键入的任何文本都将丢失。

我将如何解决这个问题?

0 投票
1 回答
1461 浏览

javascript - Knockout.js:计算出的 observable 没有按预期更新

编辑:为函数 populateDropdown 和函数 isSystemCorrect 添加了代码(见底部)

编辑 2 我已经把它缩小了一点,问题似乎出现在计算的 observable 中的 arrayFilter 函数中。无论我尝试什么,这都会返回一个空数组。我在过滤之前检查了 self.testsuites() 看起来没问题,但过滤仍然失败。

我的计算出的可观察的、已过滤的测试套件有问题。

从屏幕转储中可以看出,testsuites observable 已正确填充,但计算出的 observable 仍然为空。我还尝试从下拉菜单中选择“付款”以外的其他选项,以查看这是否会触发可观察对象,但没有。

我认为每次更改 self.testsuites() 或 self.dropdownSelected() 时都会更新计算出的 observable,但似乎都不会触发它们。

我在这里做错了什么?

我只是想让计算的可观察过滤器在选择的下拉选项之后成为测试套件,每次它们中的任何一个发生变化。

来自控制台的屏幕转储

函数是系统正确的:

0 投票
1 回答
306 浏览

ember.js - 如果我在计算属性中创建模型,ember 会泄漏内存吗?

我正在创建一个“加扰器”,它接收一个文本数组和一个图像数组,然后将叉积计算为推文。我担心的功能如下所示:

我担心的是我正在创建很多模型,而我并不真正了解 Ember 的垃圾收集。

那么,我是否有在这里创建内存泄漏的风险?

谢谢!

0 投票
2 回答
398 浏览

javascript - Knockoutjs 从 json 填充数据计算变量

我目前正在尝试使用淘汰赛和javascript,但只是遇到了一个我无法解决的问题。

我有一个带有几个(简单,因为这只是为了测试)子虚拟机的视图模型,其中一个有一个计算变量,它应该显示另一个虚拟机数组的聚合成本。

当我通过 json 加载数据时,一切都会很好地填充,但计算结果仍然“未定义”。我已经尝试用“deferEvaluation”标记计算,但这没有帮助。

简而言之,这里是我的 jsfiddle http://jsfiddle.net/v73rxckf/9/

有任何想法吗?还是我一般做错了什么?

JS代码:

0 投票
0 回答
276 浏览

javascript - 为什么车把模板不反映 ember 属性的变化

每次此组件的“子分配”的内容更改时,车把模板都没有更新,我遇到了一些问题。它确实会在第一次触发事件时发生更改,即添加或删除子分配,但在那之后不会更改,即使我可以在 FireFox 开发人员工具的 Ember 调试器插件中看到“hasSubAllocations”的计算值已更改

从车把模板

我错过了什么吗?

我们没有使用 ember 数据,所以如果您可以避免建议将其作为一个很好的解决方案

0 投票
2 回答
782 浏览

knockout.js - 淘汰匿名计算 observable 执行多次

最近,我在我目前正在从事的项目中遇到了相当奇怪的代码。这是描述该问题的孤立示例:

匿名计算 observable中的警报不仅会在创建 viewModel 时触发,而且还会在构造函数完成每次更改依赖的 observable(在本例中为 lastName)时触发。在我现在维护的代码中,这用于运行特定代码以重绘绑定的 ui 小部件。所以我的问题是:

  1. 这是淘汰赛中的一个错误,最终会被修复吗?(所以我最好在更新后停止工作之前删除这个魔法)
  2. 这是一种常见的模式并且完全可以使用吗?

更新:在我在项目中遇到的实际情况中,我需要维护有几行代码来代替警报,并且没有直接引用依赖的可观察对象,可观察对象的值在从计算内部进行的一些嵌套函数调用中发生了更改。给出的示例非常简化。此外,两个计算的 observables 都装饰有油门扩展器,这可能是让它们首先被计算的唯一目的。