我目前正在使用Knockoutjs来处理bootstrap模式中的绑定。一切正常,直到我开始在字段中添加输入掩码。例如,我有:
<div class="modal fade" id="cardModal" tabindex="-3" role="dialog" aria-hidden="true" >
<input class="form-control amountmask borderblack" data-val="true" value="11000.89" />
<!-- /.modal-dialog -->
这很好用,它使用AutoNumeric.js,这是通过JQuery应用的:
<script type="text/javascript">
$(document).ready(function () {
// masked edit for dollar amount
$('.amountmask').autoNumeric('init');
});
</script>
如果我将Knockoutjs添加到混音中,让模态使用data-bind:
<div class="modal fade" id="cardModal" tabindex="-3" role="dialog" aria-hidden="true" data-bind="with: itemForEditing">
<input class="form-control amountmask borderblack" data-val="true" data-bind="value: Amount" />
<!-- /.modal-dialog -->
绑定工作正常,但输入掩码停止工作。有没有办法解决?如果我删除数据绑定,输入掩码会再次起作用,但我松开了绑定。
答案 0 :(得分:1)
您需要做的是创建一个自定义绑定,负责将jQuery插件应用于您的输入。
Knocout doc:Creating custom bindings非常清楚如何做到这一点:
ko.bindingHandlers.yourBindingName = {
init: function(element, valueAccessor, allBindings, viewModel, bindingContext) {
// This will be called when the binding is first applied to an element
// Set up any initial state, event handlers, etc. here
},
update: function(element, valueAccessor, allBindings, viewModel, bindingContext) {
// This will be called once when the binding is first applied to an element,
// and again whenever any observables/computeds that are accessed change
// Update the DOM element based on the supplied values here.
}
};
正如您可以在评论中看到的那样,您已经实现了这样的方法:
allBindings
来访问ko绑定中指定的插件的其他选项,即data-bind
属性。请注意,原始值绑定有两个作用:
所以,你必须像我解释的那样取代这种行为。这就是为什么它不与你的插件并行工作的原因。顺便说一句,它比你想象自己定制绑定和使用它更容易。