Как замаскировать текстовое поле ввода, которое связано с данными для вычисляемой переменной Knockout
Я использую jquery MASKED INPUT PLUGIN для маскировки полей ввода, которые привязаны к переменным выбивки. У меня есть проблема в маскировании, если переменная выбивки - Computed Variable.
Вот ссылка на скрипач https://jsfiddle.net/himanshudhiman/2h1f18qo/5/
Я могу маскировать поля ввода наблюдаемого массива. Но у меня нет опции маскировки для поля ввода вычисляемой переменной (то есть здесь в моем коде есть "self.SelectById ()").
ViewModel
function KeyValuePairOfIdAndName(Name, ID) {
var self = this;
self.Name = Name;
self.ID = ID;
}
var ViewModel = function () {
var self = this;
self.listOfkeyValue = ko.observableArray();
self.SelectById = ko.computed(function () {
return ko.utils.arrayFilter(self.listOfkeyValue(), function (Fruit) {
return Fruit.ID == 1001;
});
});
var count = 1;
self.CreateNewFruit = function () {
self.listOfkeyValue.push(new KeyValuePairOfIdAndName("Apple" + count, 999 + count));
$(".inputboxofEachFruit").mask("9999");
count = count + 1;
}
}
$(document).ready(function () {
var viewModel = new ViewModel();
ko.applyBindings(viewModel);
$(".inputboxofEachFruit").mask("9999");
$(".inputboxofSelectedFruit").mask("9999");
});
HTML
<button data-bind="event: { mousedown: CreateNewFruit }" >Createe Fruit</button>
<br/>
Fruits From Observable Array
<div data-bind="foreach: listOfkeyValue" >
<input class = "inputboxofEachFruit" data-bind="value: ID"/>
</div>
<br/>
<span style = "color:Red;">Fruits From computed variable</span>
<div data-bind="foreach: SelectById" >
<input class = "inputboxofSelectedFruit" data-bind="value: ID"/>
</div>
У меня есть идея, что мне нужно привязать динамически созданные переменные к свойству маски, и я сделал это в "self.CreateNewFruit()" после добавления нового элемента в "self.listOfkeyValue()". Но что делать с вычисляемыми переменными. Как их замаскировать.
1 ответ
Один из способов будет использовать trigger
добавить .mask
когда-либо новый элемент создается
Код:
$("#cool").on("click", function () {
$(".one").mask("9999"); //dynamic elements with same class name get's mask
});
$("#cool").trigger("click");
рабочий образец с вашим кодом здесь
Другой простой способ был бы под вашим ko click
событие добавить .mask
в имени класса убедитесь, что вы поддерживаете один и тот же класс в маске элементов, как здесь