Javascript 为什么第二个警报仍显示第一视图模型(vm1)?
我有下面的代码,我很困惑为什么第二个警报显示第一个视图模型(vm1)而不是第二个视图模型(vm2)Javascript 为什么第二个警报仍显示第一视图模型(vm1)?,javascript,knockout.js,Javascript,Knockout.js,我有下面的代码,我很困惑为什么第二个警报显示第一个视图模型(vm1)而不是第二个视图模型(vm2) 函数vm1(){ this.firstName=“测试名” } 函数vm2(){ this.lastName='测试姓氏'; } ko.bindingHandlers.testBinding={ init:函数(元素、valueAccessor、allBindings、viewModel、, 绑定(上下文){ 警报(JSON.stringify(bindingContext.$data)) },
函数vm1(){
this.firstName=“测试名”
}
函数vm2(){
this.lastName='测试姓氏';
}
ko.bindingHandlers.testBinding={
init:函数(元素、valueAccessor、allBindings、viewModel、,
绑定(上下文){
警报(JSON.stringify(bindingContext.$data))
},
};
ko.applyBindings(newVM1(),document.getElementById('main');
它只显示第一个ViewModel(vm1),因为当您应用绑定时,会传递vm1的ViewModel
ko.applyBindings(new vm1(), document.getElementById('main'));
另外,ko.bindingHandlers
中的bindingContext
参数将获得传递给ko.applyBinidngs
的viewModel。由于在绑定过程中传递了第一个viewmodel,因此只能获得该信息
如果要从ko.bindingHandlers
获取v1和v2,可以创建另一个viewmodel,并为每个viewmodel创建两个属性
function vm1() {
this.firstName = "test first name"
}
function vm2() {
this.lastName = 'test last name';
}
function viewModel() {
this.vm1 = new vm1();
this.vm2 = new vm2();
}
ko.bindingHandlers.testBinding = {
init: function(element, valueAccessor, allBindings, viewModel,
bindingContext) {
alert(JSON.stringify(bindingContext.$data))
},
};
ko.applyBindings(new viewModel(), document.getElementById('main'));
然后,您将在警报框中获得此结果
{“vm1”:{“firstName”:“test first name”},“vm2”:{“lastName”:“test last name”}
因为在应用绑定时从vm1new vm1()
创建viewmodel。@M.Ihsan这不重要吗,因为我正在寻找主div中的所有绑定,对吗?没错,您正在查看主div中的所有绑定。但是您没有绑定vm2,这就是为什么您在那里看不到它。请看下面我的答案。谢谢你的答案有道理!有没有一种方法可以使用模板绑定创建子上下文?
function vm1() {
this.firstName = "test first name"
}
function vm2() {
this.lastName = 'test last name';
}
function viewModel() {
this.vm1 = new vm1();
this.vm2 = new vm2();
}
ko.bindingHandlers.testBinding = {
init: function(element, valueAccessor, allBindings, viewModel,
bindingContext) {
alert(JSON.stringify(bindingContext.$data))
},
};
ko.applyBindings(new viewModel(), document.getElementById('main'));