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

knockout.js - 为一堆变量的格式化值创建一个计算的 observable

我在视图模型中有 3 个可观察变量,并希望输出为格式化值。但是,我不想为它们中的每一个编写计算方法,因为它们是相同的。重用代码的最佳方法是什么?谢谢。

我要实现的代码是:

失败的例子在:Jsfiddle

谢谢,

0 投票
1 回答
209 浏览

knockout.js - 当观察到的数组被推送到时,为什么这个 Child Computed Observable 没有更新?

我有一个简单的例子来说明这一点。取一个简单地保存一组项目的 a 。每一行都有一个可观察的属性,在这种情况下是一个日期。ui 绑定到一组排序项,这只是一个计算的 observable。这个计算出的 observable 反过来正在监视一个计算出的 observable,它将过滤掉行。

为什么这不能按需要级联?

0 投票
1 回答
1758 浏览

knockout.js - 初始化嵌套数据后,Knockout 计算的 observable 不会更新

我正在尝试实现一个HasOpenIssues计算的 observable,它绑定到一个 UI 元素,如果嵌套的 observableArray 的任何成员满足条件,该元素就会更新,并且无法使其工作。我正在使用 KO 2.2.0。

我的视图模型有一个 observableArray of Visits;每个访问都有一个 observableArray of Issues;每个Issues数组都可以包含Issue的实例,它有一个可观察的IsFixed属性。我还有一个计算出的 observable LatestVisit,它返回Visits数组中的最后一次访问:

所有这些都开始为空,在 I 之前ko.applyBindings(),我从服务器获取一些初始数据并将其作为参数传递给我的视图模型,它使用它来初始化各种可观察对象:

因此,在此过程中的某一时刻,我无法观察到LatestVisit,因为Visits尚未填充数组,也无法观察到数组,因为尚未填充Issues其父级。Visit在我初始化之后,这些结构有数据,我需要更新HasOpenIssues以反映初始数据的状态。

然后,我允许用户向 中添加新IssuesLatestVisit,并将新的或现有的标记IssuesFixed。所以我也需要HasOpenIssues对这些变化做出反应。

我试图HasOpenIssues在视图模型的根、Visits数组、Visit原型上以及直接在LatestVisit计算上添加一个计算属性,但没有任何效果。它看起来像这样:

如果我让它在初始化之前运行,我会得到一些变化

或者,如果我, root, { deferEvaluation: true }向计算函数调用添加参数,我会得到

如果我不使用 (),比如self.LatestVisit.HasOpenIssues,那么我会得到

如果我不使用延迟选项。如果我添加它,我不会在初始化时收到错误,但是当我更新Issues后没有任何反应。

关于如何实现这一点的任何建议?

谢谢!

0 投票
1 回答
313 浏览

javascript - ko.computed() 不评估顶级对象(敲除映射)

我在页面上有两个值,一个是 ko.computed 属性,另一个是 ko.observable,两者都应该获得相同的值,但以两种不同的方式(使用 ko.mapping.fromJS 加载基础数据):

在我的情况下,#1 效果很好,但#2 根本无法触发。以同样的方式,如果我使用 self.page.subscribe(),我也会得到想要的结果。

这个问题还有第二部分,如果我创建了一些嵌套对象,那么情况 #1 和 #2 对嵌套对象按预期工作,但问题仍然存在于顶层/父对象上。

并且听到是演示这种奇怪行为的示例 - http://jsfiddle.net/rrgnK/2/

我想知道是什么导致了这个问题,是我的代码/结构还是其他什么?(我试图以这种方式解决没有特别的问题,我只是注意到这种奇怪的行为,这让我认为我可能在做一些根本错误的事情)

0 投票
1 回答
65 浏览

knockout-2.0 - 当复选框被标记时,是否有更优雅的方式通过 id 获取任意 javascript 对象?

不想让用户可以通过列表中的复选框来选择人员。

此示例有效,但我想知道您是否会以相同的方式进行操作。

主要问题是,无法轻松比较 javascript 任意对象。所以必须有一个映射。

这样可以吗?我不想为此创建自定义绑定,我可以在绑定中定义一个 Id 字段。

}

在此处完成示例:http: //jsbin.com/ukipek/6/edit

谢谢

0 投票
5 回答
3328 浏览

knockout.js - 防止计算收集依赖项

有没有好办法大致实现如下概念:

我知道peek(),但在这种情况下,计算调用的是从外部模块提供的方法,并且如果这些方法碰巧涉及可观察对象,则设计要求它纯粹是偶然的。

我有一个解决方案,大致是这样做的:

但由于显而易见的原因,这并不理想,并且在某些情况下会导致不良行为。

0 投票
1 回答
299 浏览

javascript - knockout.js 计算函数来创建两个数组?

我有一个用户可以执行搜索的对象数组。我正在使用基于搜索的 ko.computed 函数来创建另一个匹配项数组以进行显示。

这很好用,到目前为止的表现给我留下了深刻的印象。

这个问题是我还需要“不匹配”的记录,因为在某些情况下(60% 的时间)我必须对它们执行加法操作。我真的不想创建第二个 ko.computed 函数,因为每次执行搜索时我都必须第二次遍历这个数组。

所以,我的问题是:有没有办法可以使用相同的 ko.computed 来创建第二个不匹配项的数组?基本上遍历数组并将每个项目放入匹配或不匹配的数组中......

如果没有,是否更快:1)创建第二个 ko.computed 以在用户搜索时从我的数组中获取不匹配的项目;或 2) 编写一个 arrayDiff 函数并根据需要确定不匹配的项目。

干杯!

0 投票
2 回答
1162 浏览

javascript - JQuery Knockout ComputedObservable Write 没有被调用 ObservableArray

我正在尝试绑定一个内部使用可观察数组的计算可观察对象。加载时确实会调用“读取”方法。但是当表中的值改变并且焦点被移动时,不会调用“write”方法。请注意,对于不包装数组而是简单字符串的简单计算 observables,“write”方法有效。但是,对于这种情况,它不起作用。我查看了 Knockout api 文档和在线论坛,但找不到任何相关信息。有人可以请教吗?以下是 HTML 代码

以下是 Java Script 代码

我将代码与 Knockout API 文档中显示的示例类似,以便人们轻松关联。

0 投票
2 回答
1962 浏览

knockout.js - knockout.js 计算数组未在更改时触发

我正在尝试在 MVC 4 和 Knockout.js 中使用计算的 observableArray 创建一个可编辑的网格。首次加载数组时调用 computed() 方法,但不会在通过用户编辑在网格上更改任何数据时调用。

视图模型:

和 html 片段:

如果我编辑网格中的最后一个 Make,我希望数据绑定的汽车元素会更新,但事实并非如此。

如何检测网格上的变化,比如在 onblur 事件期间,在淘汰的 observableArray 中?

0 投票
3 回答
8223 浏览

mvvm - Kendo DataSource:如何为从远程 odata 源读取的数据定义“计算”属性

情况:

  • 剑道数据源

    /li>
  • 从 odata 源读取的 json 数据如下:

    /li>

问题一

1.如果我想定义一个“计算”属性:OrderedDateRelative,它应该是今天(2013-02-25)和订单创建日(2013-02-20)之间的天数,例如:“5天以前”,我如何在客户端实现这一点?

问题1的答案:http: //jsbin.com/ojomul/7/edit

问题2——更新——

2.每个订单都有其嵌套属性OrderDetails,那么可以为嵌套的OrderDetails属性定义一个计算字段吗?像:每个OrderDetail的 OrderDetailInfoCAndD,值应该类似于:OrderDetailInfoC + OrderDetailInfoD,即“Info C Info D”?

谢谢,

院长