我想在knockout.js自定義綁定中使用變量。特別是在init
回調中的事件處理程序中。在自定義綁定處理程序中使用非可觀察對象
實施例:
ko.bindingHandlers.test = {
init: function(element, valueAccessor, allBindings, viewModel, bindingContext) {
var $element = $(element);
var f = valueAccessor();
$element.mousedown(function(e) {
f = true;
});
},
update: function(element, valueAccessor, allBindings, viewModel, bindingContext) {
var f = valueAccessor();
}
};
型號:
var ViewModel = function() {
this.flag = false;
};
這裏是fiddle。
問題是:如果在元素上觸發mousedown
,則flag
未在模型中更新。
問題是這樣的線:
var f = valueAccessor();
值被複制,而不是參考。布爾人是原始人。
我可以讓flag
可觀察,所以它是一個函數,我有處理程序內的引用。但我不想要一個可觀察的......我只是不需要'在這裏通知監聽者'的變化。
我也可以做一個包裝函數或其他...但是...一個函數只是爲了得到布爾的引用?
我需要此功能只是爲了報告綁定的「狀態」。外部功能有時需要這些信息,但他們不希望在值發生變化時被淘汰。
是否有最佳做法或什麼?
這是一個表現的原因。我打算經常使用這個綁定的veeeeeeeery,並且knockout正在調用每個使用observable的函數。無論如何...你的解決方案喜歡不錯,我會嘗試;) – user3796786 2014-09-03 10:58:47
出於好奇:你可以提供一個關於jsFiddle骨架的例子,當你使用可觀察性的時候遇到性能問題嗎? – Tomalak 2014-09-03 11:02:15
是的,我可以準備一個,但是:你的解決方案的核心信息是:「不要使用原語,因爲你需要參考」。在這種情況下,可觀察物不是任何類型的wrapperobject/wrapperfunction。我不想要任何類型的包裝...只是寫一個布爾值。這只是感覺不正確。可觀察的是最重的包裝類型,因爲它具有通知事情。使用包裝器會降低性能。 – user3796786 2014-09-03 11:12:28