具有条件的Knockout事件绑定

时间:2018-02-25 07:51:39

标签: mvvm knockout.js

我想将一些事件绑定到一个元素,使用knockout" event"捆绑 但我希望所有列出的事件仅与特定案例绑定。

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 () {
        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>

但它对我不起作用。

我认为最好的方法是使用自定义bindingHandlers,但我不知道如何。

非常感谢你的帮助!

1 个答案:

答案 0 :(得分:1)

您可以通过将某些逻辑移动到视图模型中来简化绑定

<div style="border:1px solid red;width:50px;height:50px"
     data-bind="event: {
        mousedown: down, 
        mouseup:up, 
        mouseover:hover }" > </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);