2013-05-29 34 views
0

我有一個名爲isEditing的淘汰賽。如果這是真的,我想監視在當前正在編輯的<input>以外的任何地方的鼠標點擊 - 如果檢測到點擊,則執行一些操作(在這種情況下爲save)。條件onClick事件的文件正文使用淘汰賽?

這是我到目前爲止有:

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

,但它沒有目前的工作。我遇到兩個問題:

  1. 如果我點擊裏面輸入,我得到self.editing的警報
  2. 值當我點擊,是不是被重置,因爲它應該。

這裏有一個小提琴:

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

如何才能實現這一目標?我覺得自定義淘汰賽的輸入綁定可以在這裏工作,但我不知道如何開始。

回答

1

您可能需要檢查click事件中的editing屬性。喜歡的東西:

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'); 
    } 
}); 
+0

所以每次** **時間用戶點擊任何東西在應用程序中,執行此檢查?是否有任何其他方式來註冊這個「檢查」只有self.editing(true)? – RobVious

+0

是的,這就是你以前的樣子。但是,該模型只能創建一次。所以如果'編輯'改變,'click'事件將不會被註冊。 –

+0

我試過了:http://jsfiddle.net/PTSkR/86/點擊裏面的輸入仍然會註冊,並且無論如何檢測到點擊。我只想檢測點擊,如果self.editing() – RobVious