Knockout.js 这个淘汰代码是如何工作的

Knockout.js 这个淘汰代码是如何工作的,knockout.js,Knockout.js,当得到下面的代码时,我感到困惑。我正在试图理解敲除是如何工作的。 这是完整的代码 <span data-bind="text: TimeString">Start...</span> var vm = { TimeDT: ko.observable(), TimeString: ko.observable() }; function updateValues() {

当得到下面的代码时,我感到困惑。我正在试图理解敲除是如何工作的。 这是完整的代码

<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);
我可以理解一个对象是这样声明的。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() ?

请用很少的示例代码详细解释。谢谢你。observable就是knockout跟踪变量变化的方式。如果您希望knockout能够响应更改,则必须使用
ko.observable

因此,如果您这样做:

var myVM = {
    someProp = true
}
myVM.someProp = false;
var myVM = {
    someProp = ko.observable(true);
}
TimeDT: ko.observable()
vm.TimeDT(data);
然后在代码的其他地方执行以下操作:

var myVM = {
    someProp = true
}
myVM.someProp = false;
var myVM = {
    someProp = ko.observable(true);
}
TimeDT: ko.observable()
vm.TimeDT(data);
淘汰赛看不到变化。但是,如果您这样做:

var myVM = {
    someProp = true
}
myVM.someProp = false;
var myVM = {
    someProp = ko.observable(true);
}
TimeDT: ko.observable()
vm.TimeDT(data);
然后,您可以稍后使用以下命令更改其值:

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.
}
还要注意,执行此操作时:

var myVM = {
    someProp = true
}
myVM.someProp = false;
var myVM = {
    someProp = ko.observable(true);
}
TimeDT: ko.observable()
vm.TimeDT(data);
TimeDT
是一个无初始值的可观测值。但你要这样做:

var myVM = {
    someProp = true
}
myVM.someProp = false;
var myVM = {
    someProp = ko.observable(true);
}
TimeDT: ko.observable()
vm.TimeDT(data);

Knockout将看到更改并更新到
TimeDT

ko的任何绑定。observable
是Knockout跟踪更改变量的方式。如果您希望knockout能够响应更改,则必须使用
ko.observable

因此,如果您这样做:

var myVM = {
    someProp = true
}
myVM.someProp = false;
var myVM = {
    someProp = ko.observable(true);
}
TimeDT: ko.observable()
vm.TimeDT(data);
然后在代码的其他地方执行以下操作:

var myVM = {
    someProp = true
}
myVM.someProp = false;
var myVM = {
    someProp = ko.observable(true);
}
TimeDT: ko.observable()
vm.TimeDT(data);
淘汰赛看不到变化。但是,如果您这样做:

var myVM = {
    someProp = true
}
myVM.someProp = false;
var myVM = {
    someProp = ko.observable(true);
}
TimeDT: ko.observable()
vm.TimeDT(data);
然后,您可以稍后使用以下命令更改其值:

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.
}
还要注意,执行此操作时:

var myVM = {
    someProp = true
}
myVM.someProp = false;
var myVM = {
    someProp = ko.observable(true);
}
TimeDT: ko.observable()
vm.TimeDT(data);
TimeDT
是一个无初始值的可观测值。但你要这样做:

var myVM = {
    someProp = true
}
myVM.someProp = false;
var myVM = {
    someProp = ko.observable(true);
}
TimeDT: ko.observable()
vm.TimeDT(data);
Knockout将直接从:
特殊JavaScript对象中看到更改并更新到
TimeDT
的任何绑定,该对象可以通知订阅者更改,并可以自动检测依赖项

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

直接从:
特殊JavaScript对象开始,该对象可以通知订阅者更改,并可以自动检测依赖关系


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

在knockoutjs文档中对其进行了很好的解释-在knockoutjs文档中对其进行了很好的解释-此处给出了ko.observable(true);但在我的代码中,ko.observable();没有true或false…所以默认值为true?如果我通过false,会发生什么?谢谢你的回答。@Thomas:如果你不给它一个值,默认情况下它是未定义的(这是错误的)。当然,
ko.observable
可以容纳的东西不仅仅是bools!这里你给出了ko.可观察(真);但在我的代码中,ko.observable();没有true或false…所以默认值为true?如果我通过false,会发生什么?谢谢你的回答。@Thomas:如果你不给它一个值,默认情况下它是未定义的(这是错误的)。当然,
ko.observable
可以容纳的东西不仅仅是bools!