【发布时间】:2019-02-17 00:12:55
【问题描述】:
任何淘汰 obervable 的 subscribe() 仅应在值发生变化时调用。但是在下面的代码 sn-p 中,即使将相同的值分配给 observable 两次,订阅也会被调用。我可以理解,一旦订阅将被调用(即当第一次为 x 分配 y 值时)但我不明白的是为什么在分配的值没有变化的情况下第二次调用它?有人可以帮我了解订阅的工作原理吗?
// This is a simple *viewmodel* - JavaScript that defines the data and behavior of your UI
function AppViewModel() {
var x = ko.observableArray([]);
var y = [1];
var oldVal = '';
x.subscribe(function(newVal){
alert("newVal: "+newVal+" oldVal: "+oldVal);
console.log("newVal: "+newVal+" oldVal: "+oldVal);
var type = newVal instanceof Array;
alert(type);
oldVal = newVal;
});
x(y);
x(y);
}
// Activates knockout.js
ko.applyBindings(new AppViewModel());
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.2/knockout-min.js"></script>
【问题讨论】:
-
当 reference 改变时被调用。将相同的值分配给变量两次仍然是引用的更改。在控制台试试这个:
const a = "1"; a="1";
标签: javascript knockout.js knockout-2.0 knockout-3.0