Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Knockout.js 为什么属性访问像敲除js中的函数_Knockout.js - Fatal编程技术网

Knockout.js 为什么属性访问像敲除js中的函数

Knockout.js 为什么属性访问像敲除js中的函数,knockout.js,Knockout.js,请参见下面的小代码 <div> You've clicked <span data-bind="text: numberOfClicks"></span> times <button data-bind="click: incrementClickCounter">Click me</button> </div> <script type="text/javascript"> var v

请参见下面的小代码

<div>
    You've clicked <span data-bind="text: numberOfClicks"></span> times
    <button data-bind="click: incrementClickCounter">Click me</button>
</div>

<script type="text/javascript">
    var viewModel = {
        numberOfClicks : ko.observable(0),
        incrementClickCounter : function() {
            var previousCount = this.numberOfClicks();
            this.numberOfClicks(previousCount + 1);
        }
    };
</script>
寻求建议和指导。谢谢

KO如何知道视图模型的某些部分何时更改?答:您需要将您的模型属性声明为可观察的,因为这些是特殊的JavaScript对象,可以通知订阅者更改,并可以自动检测依赖关系


如果你看一下,你会发现它所做的远远不止是简单地将其设置为一个值。

淘汰版使用函数式访问属性是因为它支持古老的浏览器,如:

var ViewModel = function() {
    this.name=ko.observableArray('my name');
    alert(this.name())
    this.name1=ko.observableArray(['my name111'])
    alert(this.name1())
    this.name2=ko.observableArray([1,2,3])
    alert(this.name2())
};

ko.applyBindings(new ViewModel());
支持所有主流浏览器,甚至是古老的浏览器

IE6+、Firefox 3.5+、Chrome、Opera、Safari(桌面/移动)


您可以这样编写,您的数据模型将按照您的预期进行更新(如果您检查了viewModel对象的numberOfClicks属性,撇开敲除不谈),但仅此一点并不能告诉您的UI进行更新。这是一个绑定可观察对象的函数。我只是想知道为什么属性会像函数
this.numberOfClicks()
那样被访问,而我们不能像这样写
this.numberOfClicks
?为什么要在属性名称的末尾加括号?请放点灯。谢谢,因为这个.numberOfClicks是一个函数。numberOfClicks:ko。可观测(0)已声明为可观测数组?所以任何声明为可观测数组的属性都需要访问类似的函数?我问了什么,你回答了什么。我说的是属性访问样式类型和你的答案。我只是想知道为什么属性会像函数
this.numberOfClicks()
那样被访问,而我们不能像这样写
this.numberOfClicks
?为什么要在属性名称的末尾加括号?请放点灯。谢谢如果我的问题还不清楚,那就问我。thanks@Mou因为
这个.numberOfClicks
是一个函数。在控制台中运行它,您将获得函数代码。需要执行函数以输出可观察值。@Mou使用函数读取和写入可观察值的设计选择是为了支持旧浏览器(即
var ViewModel = function() {
    this.name=ko.observableArray('my name');
    alert(this.name())
    this.name1=ko.observableArray(['my name111'])
    alert(this.name1())
    this.name2=ko.observableArray([1,2,3])
    alert(this.name2())
};

ko.applyBindings(new ViewModel());