【发布时间】:2018-02-18 19:02:02
【问题描述】:
这是one的后续问题:
在以下代码中,func 是一个绑定到父 div 的简单函数。自然,它会在文档加载时触发,但也会在按下按钮时触发。
正如对链接问题的回答所解释的那样,我认为只有当 func 是 computed 时才会发生这种情况(因为只要它所依赖的任何可观察值发生变化,就会重新计算它的值),但我现在看到它发生在一个简单的功能上。
为什么?
var MasterViewModel = function () {
var self = this;
self.nested = new FirstViewModel();
self.func = function() {
var items = self.nested.array();
alert("executed");
};
}
var FirstViewModel = function () {
var self = this;
self.array = ko.observableArray([]);
self.push = function () {
self.array.push(new SecondViewModel());
alert("pushed");
}
}
var SecondViewModel = function () {
var self = this;
self.z = ko.observable();
}
var mvm = new MasterViewModel();
ko.applyBindings(mvm);
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.2/knockout-min.js"></script>
<div data-bind="value: func()">
<div data-bind="with: nested">
<button data-bind="text: 'push me', click: push"></button>
</div>
</div>
【问题讨论】:
-
第一件事看起来不对 - 你在这里调用执行
<div data-bind="value: func()"> -
@DanilGholtsman,有什么问题?
-
它不会导致第一个带有“已执行”消息的警报吗?如果这是预期的行为,我很抱歉让您感到困惑
-
@DanilGholtsman,确实如此,但确实在意料之中。我没想到的是按下按钮时的呼叫。