我將我的ViewModel的isChecked
屬性綁定到data-whatever
屬性。此屬性的值由jQuery的改變:KnockoutJs不會對自定義事件做出反應
$element.data('whatever', "true")
KnockoutJs沒有注意到這個變化,我的ViewModel的屬性不會改變。我如何讓KnockoutJs注意到它?
我想類似的東西,但它沒有工作:
JavaScript的 「視圖層」 的劇本:
$element.data('whatever', "true")
$element.trigger("myCustomEvent")
的觀點:
<div data-bind="attr: { 'data-whatever': isChecked, event : {myCustomEvent: checkedFunction} }">
checkedFunction
只是一個空方法在ViewModel中適合事件綁定語法。它仍然看起來像KnockoutJs不聽myCustomEvent
。
編輯
由於漁人建議我用$element.attr
代替$element.data
,但它仍然不能正常工作:
<html>
<div id="test" data-bind="attr: { 'data-whatever': isChecked }">my div</div>
<script src="http://code.jquery.com/jquery-2.1.1.min.js"></script>
<script src="http://knockoutjs.com/downloads/knockout-3.2.0.js"></script>
<script>
var vm = {
isChecked : ko.observable("one"),
};
$(function() {
ko.applyBindings(vm);
console.log($('#test').attr('data-whatever')); // "one"
$('#test').attr('data-whatever', 'two');
console.log($('#test').attr('data-whatever')); // "two"
console.log(vm.isChecked()); // // "one" again, thouh it should be "two"
});
</script>
</html>
即使我添加事件:
<html>
<div id="test" data-bind="attr: { 'data-whatever': isChecked, event :{ myCustomEvent : aFunction }}">my div</div>
<script src="http://code.jquery.com/jquery-2.1.1.min.js"></script>
<script src="http://knockoutjs.com/downloads/knockout-3.2.0.js"></script>
<script>
var vm = {
isChecked : ko.observable("one"),
aFunction : function(){ }
};
vm.isChecked.subscribe(function(){
console.log("hit the event"); // never happens
});
$(function() {
ko.applyBindings(vm);
console.log($('#test').attr('data-whatever')); // "one"
$('#test').attr('data-whatever', 'two');
$('#test').trigger('myCustomEvent');
console.log($('#test').attr('data-whatever')); // "two"
console.log(vm.isChecked()); // "one" again, though should be "two"
});
</script>
</html>
你能編輯的問題,並創建一個[攝製](http://sscce.org)?這會幫助你更輕鬆。 – Jeroen 2014-10-01 12:34:15
KO使用jQuery(如果可用)綁定到事件。這裏是你可以調整的示例:http://jsfiddle.net/rniemeyer/Lf53moaa/ – 2014-10-01 13:37:39
@Jeroen添加了repro。請看一下。 – gisek 2014-10-01 16:43:15