问题标签 [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 投票
2 回答
18673 浏览

javascript - 为什么我的 ko 计算 observable 在其值更改时不会更新绑定的 UI 元素?

我正在尝试将一个 cookie 包装在一个计算的 observable 中(我稍后会变成一个 protectedObservable)并且我在计算 observable 时遇到了一些问题。我认为对计算出的 observable 的更改将被广播到任何绑定到它的 UI 元素。

我创建了以下小提琴

JavaScript

HTML

我没有使用 observable 来存储privateZipcode,因为它实际上只是在 cookie 中。我希望ko.computed它将提供我需要的通知和绑定功能,尽管我看到的大多数示例最终ko.computed都使用了ko.observable底层。

将值写入我计算的 observable 的行为不应该向绑定到其值的 UI 元素发出信号吗?这些不应该更新吗?

解决方法

我有一个简单的解决方法,我只使用ko.observable我的 cookie 存储的旁边,使用它会触发对我的 DOM 元素的所需更新,但这似乎完全没有必要,除非ko.computed缺少具有的信号/依赖类型功能ko.observable

我的解决方法 fiddle,您会注意到唯一改变的是我添加了一个seperateObservable不用作存储的,它的唯一目的是向 UI 发出底层数据已更改的信号。

这是有道理的,并且可以按我的预期工作,因为viewModel.zipcode依赖seperateObservable和更新应该(并且确实)向 UI 发出更新信号。 我不明白的是,为什么write对我的函数的调用没有通知ko.computedUI 更新,因为该元素绑定到那个ko.computed

我怀疑我可能必须在淘汰赛中使用某些东西来手动表示我ko.computed的已更新,我对此很好,这是有道理的。我只是一直无法找到实现这一目标的方法。

0 投票
2 回答
408 浏览

knockout.js - 即使父属性为空,计算值也始终返回真值

我正在使用 ko 映射插件从 JS 对象创建我的 observables ko.mapping.fromJS(),.

该对象的片段如下:

如果Parent.Title发生更改,那么我页面上的所有内容都会按预期更新,但是当Parent变为 null 时,我遇到了问题。使用Parent属性的简化标记如下所示:

HasParent看起来像这样:

ParentTitle看起来像这样:

注意:self设置为返回的结果ko.mapping.fromJS(),然后通过调用应用到页面ko.applyBindings();

所以基本上我的问题是HasParent函数总是返回一个真实的值。

另外,这是我的第一个 ko 项目,所以如果我能以更好的方式做任何事情,请告诉我 :)

任何帮助,将不胜感激。

谢谢。

0 投票
1 回答
1519 浏览

data-binding - 带变量的 knockout.js 动态字段绑定

有没有办法动态替换 ko.computed 中正在写入和读取的字段?例如,使用此函数,我想将 self.JobStartDate 替换为可以传入的变量字段名:

0 投票
2 回答
1004 浏览

javascript - Knockout 中的可重用计算字段

我有一个使用映射插件的 Knockout Viewmodel。映射 JSON 对象后,我创建了一些计算值,如下所示:

不要太担心代码的作用,我更关心的是模式。如您所见,这两个属性formattedGiftAmount()具有formattedGoal()几乎相同的对象来定义它们。唯一的区别是它们修改了哪些属性。我可能会有更多这样的实例,所以我想知道是否有任何方法可以使它更可重用。我可以想象做类似的事情this[prop](),但我不太清楚如何将它注入对象并让它工作。

PS:我已经看到了,但它仍然不能完全满足我的要求。

0 投票
1 回答
969 浏览

jquery - 为什么我不能在 Knockoutjs 中使用 ko.computed()?

我是使用 knockoutjs 的新手,在使用 .computed() 时遇到了这个问题

这是我的 HTML 代码:

​</p>

这是我的脚本代码:

我真的不知道似乎是什么错误。请帮忙。先感谢您。

0 投票
5 回答
41883 浏览

knockout.js - 如何在 Knockout 中创建计算的可观察数组

我想知道如何创建一个计算的可观察数组。

在我的视图模型中,我有 2 个可观察数组,我想要一个计算的可观察数组,它只是两个数组的组合。

0 投票
1 回答
24764 浏览

knockout.js - 淘汰赛:计算的可观察值与函数

在使用淘汰赛时,使用只读计算的可观察对象而不是简单的函数有什么优势?

以下面的viewmodel构造函数和html片段为例:​</p>

这里的一切似乎都如你所料,所以我应该改用:

我注意到http://knockoutjs.com/documentation/computedObservables.html上的文档指出“......声明性绑定只是作为计算的 observables 实现”,这是否意味着我需要在我的视图模型中明确使用它们?

0 投票
1 回答
677 浏览

list - 淘汰赛 - 减去数组中的值

我在以下方面遇到了一些麻烦。我正在使用淘汰赛来编辑包含嵌套列表的列表,有点像淘汰赛网站上的联系人编辑器:

http://knockoutjs.com/examples/contactsEditor.html

在我的示例中,“设计”与上述示例中的“联系人”相关,“设计交付”与“电话号码”相关。

所以我在每个“设计”中都有一个名为 MaxQuantity 的值,在每个“designDelivery”中都有一个名为 Quantity 的值。实际上,我想要实现的是在每个名为“Remaining”的“设计”中都有另一个值,它基本上是“MaxQuantity”减去与特定“设计”相关的所有“designDeliveries”中“Quantity”的总和”。当我添加新的“designDeliveries”并填充“Quantity”字段时,这当然应该从该特定设计的新“Remaining”值中扣除

到目前为止,我有以下代码:

初始数据看起来像这样:

和这样的html:

我希望这足够清楚。有人知道我将如何实现这一目标吗?

提前致谢

0 投票
1 回答
985 浏览

knockout.js - Knockoutjs + ko.mapping.fromJS + 计算字段不计算计算

我尝试这样做:

第一次 - 加载后 - computedWeight 计算正确。但是当我改变 weight 或 anotherWeight 字段时 - computedWeight 不会改变。
谢谢。

0 投票
1 回答
1254 浏览

knockout.js - knockout.js 中的自定义油门扩展器

我有一个绑定到某些输入的 observable,有时它的值变化太快,以至于最终用户没有时间阅读它。所以我想限制输入变化的速度。

但这不是一个节流阀,因为节流阀是一个瓶颈,节流的 observable 在变化的同时根本没有变化。我想要一个自定义油门,以便立即应用第一个更改,然后它可能仅在延迟后更改(当然,每次延迟后它都会显示 CURRENT 值)。

到目前为止,我已经编写了自定义的 restrictSpeedChange 扩展程序。这是:http: //jsfiddle.net/kasheftin/Pn9r8/4/。它实际上适用于通常的 observables。

问题是我希望它也可以与计算的 observables 一起使用。对他们来说,throttle extender 有throttleEvaluation 变量,这个变量在dependentObservable.js evaluatePossiblyAsync 方法中使用。但我不想更改核心淘汰文件中的任何内容。

在我的示例http://jsfiddle.net/kasheftin/Pn9r8/4/中,通常的可观察变量是 restrictChangeSpeedVar1 并且它按预期工作。计算变量是restrictChangeSpeedComputedVar1。我应该怎么做才能让它像第一个一样工作?