淘汰赛可观察到的最新价值

加维奥拉

我想知道淘汰赛在哪里存储了可观测值的价值。例如,我有以下代码:

var field1 = ko.observable('a');
field1(); // prints 'a'
field1.peek(); // prints 'a'
field1._latestValue; //prints 'a'

field1._latestValuu = 'b';
field1._latestValue; //prints 'b'
field1(); // prints 'a'
field1.peek(); //prints 'a'

因此,不确定淘汰赛在哪里存储价值。我看到了peek()的实现,它返回了_latestValue。但是,即使在手动更改_latestValue之后,在调用peek()时仍然可以得到旧值。

我希望在手动设置_latestValue之后,像field1()或field1.peek()之类的调用会返回新值。

我知道不会调用订阅者,并且_latestValue是内部变量,这可能会有些棘手,但这对我需要解决的问题很好。

编辑:我想要这样做的原因是为计算的可观察值设置初始值。因此,我希望能够修改其_latestValue,以便当我调用field()或field.peek()时,它返回我手动设置的值,而不是所计算的值。我将启用带有标志的计算,如下所示:

var Object1 = function() {
    self.mode = ko.observable('read-only');
    self.calculated = ko.computed({
        read: function() {
           if (self.mode() == 'read-only') {
              if (self.calculated)
                  return self.calculated._latestValue;
           } else {
              // calculation goes here
           }
       },
       write: function(value) {
           self.calculated._latestValue = value;
       }
   });
};
var obj1 = new Object1();
obj1.calculated('a');
obj1.calculated(); // prints 'a'
obj1.mode('edit');
obj1.calculated(); // prints calculated value
RP尼迈耶

有一个称为的内部变量_latestValue在调试版本中,这是从观察到的暴露出来的._latestValue但是,直接设置它不会影响内部_latestValue变量。

喜欢:

var a = 1
this.a = a;

this.a = 2;

在此示例中,变量a仍为1;

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

淘汰赛:找出计算出的可观察触发

淘汰赛订阅可观察的复杂对象的任何更改

无法在淘汰赛js中观察到数据

计算出的强制淘汰赛在更换可观察到的内部后重新评估

用JavaScript编写类似C#的扩展以实现可观察到的淘汰赛

淘汰赛绑定包装器,输入更改不会触发可观察到的订阅

淘汰赛JS:从ViewModel可观察数组创建Json

淘汰赛:将可观察对象克隆到另一个变量中并将其变为不可观察

替换作为参数发送的可观察的淘汰赛

淘汰赛可观察到多个订阅

如何在html上显示此可观察到的淘汰赛?

淘汰赛-添加了可观察到的未在新对象上更新的功能

当儿童可观察到的更新时,淘汰赛js css似乎没有重新计算

淘汰赛无法观察到样式属性

带有字符的淘汰赛追加可观察对象

浏览器之间可观察到的淘汰赛共享-仅在本地更改值时订阅

淘汰赛可观察的订阅多次触发

可观察到淘汰赛-为什么此值会自动更新?

可观察到淘汰赛更新

为什么可观察到的不通知是否阻止了淘汰赛?

淘汰赛如何设置可观察儿童的价值

从可观察到的淘汰赛中删除最后一个角色

选择的下拉值更改时,可观察到的淘汰赛未更新

将recaptcha响应放入可观察到的js淘汰赛中

淘汰赛JS和可观察的单选按钮

在淘汰赛中对可观察的列表进行排序

淘汰赛:可观察输入数组的 observableArray

分配时淘汰赛可观察数组被覆盖

淘汰赛:更改可观察值