Javascript self=在带有敲除的嵌套viewmodel中这种奇怪的行为
我正试图掌握knockout.js,但我似乎遇到了一个我不知道的javascript怪癖 Html 当我移除自我=这个;NestedViewModel中的行,我将self.number替换为this.number,一切正常!我不知道javascript在引擎盖下做什么。。。有人对此有解释吗?还有一个解决方案Javascript self=在带有敲除的嵌套viewmodel中这种奇怪的行为,javascript,knockout.js,Javascript,Knockout.js,我正试图掌握knockout.js,但我似乎遇到了一个我不知道的javascript怪癖 Html 当我移除自我=这个;NestedViewModel中的行,我将self.number替换为this.number,一切正常!我不知道javascript在引擎盖下做什么。。。有人对此有解释吗?还有一个解决方案 您需要通过将var放在变量前面来声明这些变量。如果不声明它们,您将试图写入全局self,而大多数浏览器都不允许这样做。(如果不是因为浏览器中已经有一个名为self的全局代码,那么该代码将成为
您需要通过将
var
放在变量前面来声明这些变量。如果不声明它们,您将试图写入全局self
,而大多数浏览器都不允许这样做。(如果不是因为浏览器中已经有一个名为self
的全局代码,那么该代码将成为var
的牺牲品,并且仍然需要var
——事实上,它是在以后的i
中出现的)
例如:
函数嵌套视图模型(编号){
var self=这个;
// ^^^
自身数量=可观察到的ko(数量);
}
函数ViewModel(){
var self=这个;
// ^^^
self.someList=[];
对于(var i=0;i,除了@T.J.的答案之外,您可能还希望使数组成为可观察的
self.someList = ko.observableArray([]);
关于这个
的最详细的解释,请看这里。aarrg!现在看起来很明显。我只是太习惯使用类型安全语言了,所以我不会马上注意到这些错误。希望“使用严格的”至少部分解决了这个问题。非常感谢!你是对的,但是很高兴知道选项在那里,也许我应该将其添加为注释。事实上,我将示例代码简化为最基本的部分来演示这个问题:)
function NestedViewModel(number) {
self = this;
self.number = ko.observable(number);
}
function ViewModel() {
self = this;
self.someList = [];
for (i=0;i<10;i++) {
var vm = new NestedViewModel(i);
self.someList.push(vm);
}
}
ko.applyBindings(new ViewModel());
Uncaught TypeError: Cannot read property 'push' of undefined
function NestedViewModel(number) {
var self = this;
// ^^^
self.number = ko.observable(number);
}
function ViewModel() {
var self = this;
// ^^^
self.someList = [];
for (var i=0;i<10;i++) {
// ^^^
var vm = new NestedViewModel(i);
self.someList.push(vm);
}
}
ko.applyBindings(new ViewModel());
self.someList = ko.observableArray([]);