0

我有一个名为isEditing. 如果这是真的,我想监视<input>当前正在编辑的任何地方的鼠标点击 - 如果检测到点击,则执行一些操作(save在这种情况下)。

这是我到目前为止所拥有的:

self.editing = ko.observable(false);
    if (self.editing()) {
        $('html').click(function () {
            //dataservice call to save()
            self.editing(false);
            alert('closed');
        });
    }

但它目前不工作。我遇到了两个问题:

  1. 如果我在输入中单击,我会收到警报
  2. 当我单击时,self.editing 的值不会被重置,因为它应该。

这是一个小提琴:

http://jsfiddle.net/PTSkR/81/

如何做到这一点?我觉得输入上的自定义敲除绑定在这里可以工作,但我不确定如何开始。

4

1 回答 1

1

您可能需要检查事件中的editing属性click。就像是:

self.editing = ko.observable(false);
$('html').click(function () {
    if (self.editing()) {
        //dataservice call to save()
        self.editing(false);
        alert('closed');
    }
});

您可以这样做的另一种方法是在更改时监听editing,然后绑定或取消绑定事件处理程序:

self.editing.subscribe(function (newValue) {
   if(newValue) // bind the event handler...
   {
      $('html').click(function () {
         //dataservice call to save()
         self.editing(false);
         alert('closed');
      });
   }
   else //Unbind it
   {
      $('html').unbind('click');
   }
});
于 2013-05-29T00:44:02.090 回答