问题标签 [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 - 为什么我的 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.computed
UI 更新,因为该元素绑定到那个ko.computed
?
我怀疑我可能必须在淘汰赛中使用某些东西来手动表示我ko.computed
的已更新,我对此很好,这是有道理的。我只是一直无法找到实现这一目标的方法。
knockout.js - 即使父属性为空,计算值也始终返回真值
我正在使用 ko 映射插件从 JS 对象创建我的 observables ko.mapping.fromJS()
,.
该对象的片段如下:
如果Parent.Title
发生更改,那么我页面上的所有内容都会按预期更新,但是当Parent
变为 null 时,我遇到了问题。使用Parent
属性的简化标记如下所示:
HasParent
看起来像这样:
ParentTitle
看起来像这样:
注意:self
设置为返回的结果ko.mapping.fromJS()
,然后通过调用应用到页面ko.applyBindings();
所以基本上我的问题是HasParent
函数总是返回一个真实的值。
另外,这是我的第一个 ko 项目,所以如果我能以更好的方式做任何事情,请告诉我 :)
任何帮助,将不胜感激。
谢谢。
data-binding - 带变量的 knockout.js 动态字段绑定
有没有办法动态替换 ko.computed 中正在写入和读取的字段?例如,使用此函数,我想将 self.JobStartDate 替换为可以传入的变量字段名:
javascript - Knockout 中的可重用计算字段
我有一个使用映射插件的 Knockout Viewmodel。映射 JSON 对象后,我创建了一些计算值,如下所示:
不要太担心代码的作用,我更关心的是模式。如您所见,这两个属性formattedGiftAmount()
具有formattedGoal()
几乎相同的对象来定义它们。唯一的区别是它们修改了哪些属性。我可能会有更多这样的实例,所以我想知道是否有任何方法可以使它更可重用。我可以想象做类似的事情this[prop]()
,但我不太清楚如何将它注入对象并让它工作。
PS:我已经看到了,但它仍然不能完全满足我的要求。
jquery - 为什么我不能在 Knockoutjs 中使用 ko.computed()?
我是使用 knockoutjs 的新手,在使用 .computed() 时遇到了这个问题
这是我的 HTML 代码:
</p>
这是我的脚本代码:
我真的不知道似乎是什么错误。请帮忙。先感谢您。
knockout.js - 如何在 Knockout 中创建计算的可观察数组
我想知道如何创建一个计算的可观察数组。
在我的视图模型中,我有 2 个可观察数组,我想要一个计算的可观察数组,它只是两个数组的组合。
knockout.js - 淘汰赛:计算的可观察值与函数
在使用淘汰赛时,使用只读计算的可观察对象而不是简单的函数有什么优势?
以下面的viewmodel构造函数和html片段为例:</p>
这里的一切似乎都如你所料,所以我应该改用:
我注意到http://knockoutjs.com/documentation/computedObservables.html上的文档指出“......声明性绑定只是作为计算的 observables 实现”,这是否意味着我需要在我的视图模型中明确使用它们?
list - 淘汰赛 - 减去数组中的值
我在以下方面遇到了一些麻烦。我正在使用淘汰赛来编辑包含嵌套列表的列表,有点像淘汰赛网站上的联系人编辑器:
http://knockoutjs.com/examples/contactsEditor.html
在我的示例中,“设计”与上述示例中的“联系人”相关,“设计交付”与“电话号码”相关。
所以我在每个“设计”中都有一个名为 MaxQuantity 的值,在每个“designDelivery”中都有一个名为 Quantity 的值。实际上,我想要实现的是在每个名为“Remaining”的“设计”中都有另一个值,它基本上是“MaxQuantity”减去与特定“设计”相关的所有“designDeliveries”中“Quantity”的总和”。当我添加新的“designDeliveries”并填充“Quantity”字段时,这当然应该从该特定设计的新“Remaining”值中扣除
到目前为止,我有以下代码:
初始数据看起来像这样:
和这样的html:
我希望这足够清楚。有人知道我将如何实现这一目标吗?
提前致谢
knockout.js - Knockoutjs + ko.mapping.fromJS + 计算字段不计算计算
我尝试这样做:
第一次 - 加载后 - computedWeight 计算正确。但是当我改变 weight 或 anotherWeight 字段时 - computedWeight 不会改变。
谢谢。
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。我应该怎么做才能让它像第一个一样工作?