Mvvm 带条件的敲除事件绑定
我想使用敲除“事件”绑定将一些事件绑定到元素 但我希望列出的所有事件都只与一个特定案例相关联 viewmodel:Mvvm 带条件的敲除事件绑定,mvvm,knockout.js,Mvvm,Knockout.js,我想使用敲除“事件”绑定将一些事件绑定到元素 但我希望列出的所有事件都只与一个特定案例相关联 viewmodel: function vm(){ var self = this; self.isEditMode = ko.observable(false);//can be changed to true self.events = ko.observable({ down: function () { console.log("down") }, up:
function vm(){
var self = this;
self.isEditMode = ko.observable(false);//can be changed to true
self.events = ko.observable({
down: function () {
console.log("down")
},
up: function () {
console.log("up")
},
hover: function () {
console.log("hover")
}
});
}
以及Html:
<div style="border:1px solid red;width:50px;height:50px"
data-bind="event:{mousedown:events().down,mouseup:events().up,mouseover:events().hover}:null"></div>
<button data-bind="click:function(){isEditMode(!isEditMode())}">change </button>
改变
我试过:
<div data-bind="event:isEditMode()?{mousedown:events().down,mouseup:events().up,mouseover:events().hover}:null"></div>
但这对我不起作用
我认为最好的方法是使用自定义BindingHandler,但我不知道怎么做
非常感谢你的帮助 通过将一些逻辑移到视图模型中,可以简化绑定
<div style="border:1px solid red;width:50px;height:50px"
data-bind="event: {
mousedown: down,
mouseup:up,
mouseover:hover }" > </div>
另一个选项是使用“if”绑定将条件作为两个单独的块放置在标记本身中,以确定显示和绑定哪些块
函数vm(){
var self=这个;
self.isEditMode=ko.observable(false);//可以更改为true
self.events=ko.observable({
下:函数(){
控制台。登录(“关闭”);
},
up:function(){
控制台。登录(“up”);
},
悬停:函数(){
控制台日志(“悬停”);
}
});
}
应用绑定(新vm())代码>
编辑模式
只读
更改
首先,它在没有isEditMode()条件的情况下工作吗?我刚刚检查了您的代码,以及它在isEditMode为false时的工作情况。您面临的问题是什么?是的,它在没有isEditMode()条件的情况下工作。它甚至可以与isEditMode()条件一起工作,当它设置为true时,但如果设置为false(通过单击我最近添加到上面的按钮),我会得到一个ko错误。然后您会得到什么错误?当鼠标悬停在div上时会发生这是我的第一步,但我更喜欢阻止可重用代码。我还想支持将来会发生的更多事件,迫使他们具备这种条件。
function vm() {
var self = this;
this.isEditMode = ko.observable(true);
down = function() {
if(this.isEditMode())
{
console.log("down")
}
};
up = function() {
if(this.isEditMode())
{
console.log("up")
}
};
hover = function() {
if(this.isEditMode())
{
console.log("hover")
}
};
}
var viewModel = new vm();
ko.applyBindings(viewModel);