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());