Javascript 嵌套绑定上下文不需要$parent就可以访问

Javascript 嵌套绑定上下文不需要$parent就可以访问,javascript,jquery,knockout.js,Javascript,Jquery,Knockout.js,我刚刚开始使用knockout.js开发一个地图应用程序。我有些了解绑定上下文是如何工作的,但我不理解showCoord 无需$parent即可访问函数。这是密码 var-mapplication=function(){ //成员函数 self=这个; var映射; self.locations=ko.array([ {名称:'博物馆',合作伙伴:{lat:-37.669012,lng:144.841027}, {名称:'Ariport',合作伙伴:{lat:-37.669012,lng:14

我刚刚开始使用knockout.js开发一个地图应用程序。我有些了解绑定上下文是如何工作的,但我不理解
showCoord
无需
$parent
即可访问函数。这是密码

var-mapplication=function(){
//成员函数
self=这个;
var映射;
self.locations=ko.array([
{名称:'博物馆',合作伙伴:{lat:-37.669012,lng:144.841027},
{名称:'Ariport',合作伙伴:{lat:-37.669012,lng:144.841027}}
]);
self.showCoord=函数(obj){
控制台日志(obj.coord);
}
var init=函数(){
ko.应用绑定(MapApplication);
};
美元(初始);
}();


尝试使用
$parent
看看会发生什么

实际上,请尝试将
ko.applyBindings(MapApplication)
更改为
ko.applyBindings()
。它仍将以同样的方式工作

发生的情况是,
locations
的行为类似于Window的子函数,并且它自己的父
mapplication
无法识别。这是因为您尚未初始化
MapApplication
,在创建之前无法对其进行初始化

奖励-尝试如下修改代码:

self.showCoord = function(obj) {
   console.log(obj.coord);
   console.log(self);
}
并检查“self”的值


正确的绑定方式如下:

var-mapplication=function(){
//成员函数
self=这个;
var映射;
self.locations=ko.array([
{名称:'博物馆',合作伙伴:{lat:-37.669012,lng:144.841027},
{名称:'Ariport',合作伙伴:{lat:-37.669012,lng:144.841027}}
]);
self.showCoord=函数(obj){
控制台日志(obj.coord);
}                
};
var init=函数(){
应用绑定(新的MapApplication());
};
美元(初始)


尝试使用
$parent
看看会发生什么

实际上,请尝试将
ko.applyBindings(MapApplication)
更改为
ko.applyBindings()
。它仍将以同样的方式工作

发生的情况是,
locations
的行为类似于Window的子函数,并且它自己的父
mapplication
无法识别。这是因为您尚未初始化
MapApplication
,在创建之前无法对其进行初始化

奖励-尝试如下修改代码:

self.showCoord = function(obj) {
   console.log(obj.coord);
   console.log(self);
}
并检查“self”的值


正确的绑定方式如下:

var-mapplication=function(){
//成员函数
self=这个;
var映射;
self.locations=ko.array([
{名称:'博物馆',合作伙伴:{lat:-37.669012,lng:144.841027},
{名称:'Ariport',合作伙伴:{lat:-37.669012,lng:144.841027}}
]);
self.showCoord=函数(obj){
控制台日志(obj.coord);
}                
};
var init=函数(){
应用绑定(新的MapApplication());
};
美元(初始)


谢谢你的回答,雷。我知道正确的方法就是你建议的方法,但是我试着用模块模式和IIFE来组织代码。谢谢你的回答。我知道正确的方法应该是您建议的方法,但我尝试使用模块模式和IIFE组织代码。