【问题标题】:Knockout observable latest valueKnockout 可观察到的最新值
【发布时间】:2013-12-23 15:52:54
【问题描述】:

我想知道 Knockout 在哪里存储可观察值的值。例如,我有以下代码:

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'

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

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

我知道不会调用订阅者,这可能有点棘手,因为 _latestValue 是一个内部变量,但这对于我需要解决的问题来说很好。

编辑:我想这样做的原因是为计算的 observable 设置一个初始值。所以我希望能够修改它的 _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

【问题讨论】:

    标签: knockout.js


    【解决方案1】:

    有一个名为_latestValue 的内部变量。在调试版本中,这从可观察对象中暴露为._latestValue。但是直接设置不会影响内部的_latestValue变量。

    喜欢:

    var a = 1
    this.a = a;
    
    this.a = 2;
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-12-28
      • 2015-07-13
      • 1970-01-01
      • 2014-04-13
      • 2014-01-28
      • 2021-05-08
      • 2021-12-30
      • 2019-10-28
      相关资源
      最近更新 更多