Javascript 如何从DOM(KnockoutJS)中删除$data、$parent等

Javascript 如何从DOM(KnockoutJS)中删除$data、$parent等,javascript,knockout.js,data-binding,custom-binding,knockout-3.0,Javascript,Knockout.js,Data Binding,Custom Binding,Knockout 3.0,我刚刚开始使用击倒,所以如果有些东西很难看,请告诉我 我真正想做的一件事是尽可能从DOM中删除$parent、$data等 我在其他地方见过这样做的方法,但不记得在哪里 代码片段附呈,如果有人能为我指出正确的方向,将不胜感激 //用于抽象出jQuery依赖关系-以防万一将来某个时候jQuery被另一个库替换。 函数activeClassSingle(元素、标准类、activeClass){ $(element).sides().removeClass(activeClass).addClass

我刚刚开始使用击倒,所以如果有些东西很难看,请告诉我

我真正想做的一件事是尽可能从DOM中删除$parent、$data等

我在其他地方见过这样做的方法,但不记得在哪里

代码片段附呈,如果有人能为我指出正确的方向,将不胜感激

//用于抽象出jQuery依赖关系-以防万一将来某个时候jQuery被另一个库替换。
函数activeClassSingle(元素、标准类、activeClass){
$(element).sides().removeClass(activeClass).addClass(standardClass);
$(元素).removeClass(标准类).addClass(活动类);
}
//助手文件中的助手类
ko.bindingHandlers.buttonGroupChecked={
init:function(元素、valueAccessor、allBindingsAccessor、,
viewModel,bindingContext){
var value=valueAccessor();
var newValueAccessor=函数(){
返回{
单击:函数(){
值(allBindingsAccessor.get('val');
}
}
};
ko.bindingHandlers.event.init(元素,newValueAccessor,
allBindingsAccessor、viewModel、bindingContext);
},
更新:函数(元素、valueAccessor、allBindingsAccessor、,
viewModel,bindingContext){
if(allBindingsAccessor.get(“val”)==ko.unwrap(valueAccessor()){
activeClassSingle(元素,“btn信息”,“btn成功”);
}        
}
}
//原始数据
var成人=[
{val:1,文本:“1”},
{val:2,文本:“2”},
{val:3,文本:“3”},
{val:4,文本:“4”},
{val:5,文本:“5”},
{val:6,文本:“5+”}
];
//视图模型等。
var ViewModel=函数(){
此成人n=可观察的ko(2);
};
var vm=new ViewModel();
ko.应用绑定(vm)

您可以通过在html中执行以下操作绕过$data:

foreach:{数据:成人,如:'成人'}

据我所知,$parent并没有那么干净。唯一的方法是为数组中的每个项定义父项

//用于抽象出jQuery依赖关系-以防万一将来某个时候jQuery被另一个库替换。
函数activeClassSingle(元素、标准类、activeClass){
$(element).sides().removeClass(activeClass).addClass(standardClass);
$(元素).removeClass(标准类).addClass(活动类);
}
//助手文件中的助手类
ko.bindingHandlers.buttonGroupChecked={
init:function(元素、valueAccessor、allBindingsAccessor、,
viewModel,bindingContext){
var value=valueAccessor();
var newValueAccessor=函数(){
返回{
单击:函数(){
值(allBindingsAccessor.get('val');
}
}
};
ko.bindingHandlers.event.init(元素,newValueAccessor,
allBindingsAccessor、viewModel、bindingContext);
},
更新:函数(元素、valueAccessor、allBindingsAccessor、,
viewModel,bindingContext){
if(allBindingsAccessor.get(“val”)==ko.unwrap(valueAccessor()){
activeClassSingle(元素,“btn信息”,“btn成功”);
}        
}
}
//原始数据
var成人=[
{val:1,文本:“1”},
{val:2,文本:“2”},
{val:3,文本:“3”},
{val:4,文本:“4”},
{val:5,文本:“5”},
{val:6,文本:“5+”}
];
//视图模型等。
var ViewModel=函数(){
此成人n=可观察的ko(2);
};
var vm=new ViewModel();
ko.应用绑定(vm)


您在代码中使用的
$parent
非常理想,因为
$data
将当前循环实例引用为根级别(viewModel)中的
adultsNo
。简而言之,绑定上下文的使用取决于如何构建viewmodel。Cheers Hanks Supercol-有没有办法调整我的viewModel以实现我想要实现的目标?您的示例中不需要$数据。简单地使用val/text就足够了。那么我什么时候使用$data呢?您还可以为我指出如何实现我所期望的目标的方向吗(尽管不需要$data,但会稍微整理一下)我为什么要投反对票?对不起,弗拉德,但我不明白你在这里实际做了什么-我的目标是减少DOM中的干扰绑定-ChromsonChris在评论中指出,我目前的设置根本不需要使用$data。我错过了什么吗?我对这个问题有自己的偏见。我离开$data是因为我想要更具可读性的东西,比如用年龄元素绑定成人列表:“成人.age”、“age”或“$data.age”。我喜欢“成人。年龄”。对不起,我没有理解问题的意思。