0

获得以下代码时感到困惑。我试图了解淘汰赛的工作原理。这是完整的代码

<span data-bind="text: TimeString">Start...</span>
var vm = {
            TimeDT: ko.observable(),
            TimeString: ko.observable()
        };

        function updateValues() {
            var data = new Date();
            vm.TimeDT(data);
            vm.TimeString(data);
        }

        ko.applyBindings(vm);

        updateValues();
        setInterval(updateValues, 5000);

看看这段代码

 var vm = {
                TimeDT: ko.observable(),
                TimeString: ko.observable()
            };

我可以理解一个对象是这样声明的。vm 是这里的对象,它有两个名为TimeDT 和 TimeString的函数,但我无法理解

TimeDT: ko.observable(), what is the meaning of 
ko.observable() is assign to TimeDT ?

what will store in TimeDT return by  ko.observable() ?

请用更多的示例代码详细说明。谢谢

4

2 回答 2

2

ko.observable是淘汰赛如何跟踪变化的变量。如果您希望淘汰赛能够响应更改,则必须使用ko.observable.

所以,如果你这样做:

var myVM = {
    someProp = true
}

然后在代码中的其他地方执行以下操作:

myVM.someProp = false;

淘汰赛不会看到变化。但是,如果您这样做:

var myVM = {
    someProp = ko.observable(true);
}

然后您可以稍后更改它的值:

myVM.someProp(false);

并且 Knockout 会注意到更改并自动更新任何绑定的 html。

注意:由于ko.obsevable它是一个函数而不是一个实际的属性(感谢 IE 不支持 Javascript getter 和 setter),因此访问值有点不同:

var whatsMyValue = myVM.someProp();

您必须实际调用该方法,它将返回它的值。当你第一次开始和结束做这样的事情时,很容易忘记:

if (myVM.someProp) {
    // this code will always be executed regardless of the actual value 
    // of someProp() because myVM.someProp is a function, 
    // which is truthy.
}

你真正需要的是

if (myVM.someProp()) {
    // now this works as expected.
}

另请注意,当您执行此操作时:

TimeDT: ko.observable()

TimeDT是一个没有初始值的 observable。但是你这样做:

vm.TimeDT(data);

Knockout 将看到更改并将任何绑定更新为TimeDT.

于 2013-07-10T13:25:36.920 回答
1

直接来自文档special JavaScript objects that can notify subscribers about changes, and can automatically detect dependencies

该代码将TimeDT属性初始化为可观察的,它将跟踪对其值的更改并在必要时更新 UI。

于 2013-07-10T13:25:42.727 回答