2012-06-06 24 views
1

是否可以通過如下所示的數據綁定聲明來設置showErrorConsole?這個炸彈與「k.apply不是功能」。我知道我可以在這裏使用內聯函數,但是這樣做感覺不對,並且打字的次數也多了。knockout.js在數據綁定聲明中賦值observable

HTML:

<div data-bind="event: { mouseover: showErrorConsole(true) }" ></div> 
<div id="devConsole" data-bind="visible: showErrorConsole"> 
     <div><button data-bind="click: showErrorConsole(false)">X</button></div> 
</div> 

視圖模型:

AjaxErrorsModel = (function() { 
    function Constructor() { 
     var self = this; 
     self.errors = ko.observableArray(); 
     self.hasErrors = ko.computed(function() { 
      return self.errors().length > 0; 
     }, self); 
     self.showErrorConsole = ko.observable(false); 
    }; 
    return Constructor; 
})(); 
+0

我很驚訝你不能通過數據綁定設置一個可觀察的屬性,並最終使用匿名函數。這似乎是一個基本的東西 - 我很好奇爲什麼Knockout作者將它排除在外。 – henry74

回答

0

有可能是一個整潔的KO招讓你做到這一點,但最簡單的方法是隻添加這您的構造函數:

self.showErrorConsoleIsFalse = function() { 
    self.showErrorConsole(false); 
}; 

然後:

<button data-bind="click: showErrorConsoleIsFalse"> 

或者,如果你想要的鼠標懸停事件,這將是同樣的想法:

self.showErrorConsoleIsTrue = function() { 
    self.showErrorConsole(true); 
}; 

<div data-bind="event: { mouseover: showErrorConsoleIsTrue }" ></div> 

編輯

當然還有什麼能阻止你從jQuery管理這些事件:

<div class="showConsole" ></div> 

$(".showConsole").hover(function() { 
    yourViewModel.showErrorConsole(true); 
}, function() { 
    yourViewMode.showErrorConsole(false); 
}); 
+0

謝謝。畢竟,我查看了我選擇匿名內聯函數的選項。這不是我想要的,但是出於可用選項的考慮,它適合我的最佳口味。在視圖模型中爲可打開或關閉的每個屬性添加額外的「setter」方法似乎會污染VM太多。 – TugboatCaptain