私は観察可能なアイテムのobservable配列であるテーブルを持っています。各行の最初の項目は項目番号です。私はおそらく10行の既存のデータで私のページをロードします。新しいデータ行を追加しようとしています。私は項目番号とタブアウトを入力します。それが起こると、配列にすでに入っているかどうかをチェックして、ユーザーが同じ項目番号の複数を追加できないようにします。まあ、それが観測可能なので、私はそれを入力するか、または私がタブアウトしたときに即座に配列に追加されると仮定しています。そのチェックはです。常にがtrueを返します。 knockoutjs - 配列にアイテムが存在するかどうかを常にチェックする
はここでチェックを行い、私の関数である。self.checkItemNo = function(data) {
//console.log("lost focus - " + self.invalidItem());
var itemNo = $.trim(data.itemNo());
console.log(itemNo);
if (itemNo != "") {
var item = "";
$.each(window.listOfItems, function(i, v) {
if (v.No.search(itemNo) != -1) {
item = v.Description;
return;
}
});
console.log(item);
if(item != "") {
console.log(self.items()[0].itemNo());
var match = ko.utils.arrayFirst(self.items(), function(oldItem) {
console.log("checking " + newItem.itemNo());
//return itemNo === newItem.itemNo();
return newItem !== oldItem && newItem.itemNo() === oldItem.itemNo();
});
そしてここcheckItemNoが呼び出されるところである:あなたが自分自身にアイテムを比較していない
<input data-bind="value: itemNo, hasFocus: invalidItem, selected: invalidItem, event: { blur: $parent.checkItemNo }, attr: { name: 'brochureitems[' + $index() + '].itemNo', id: 'brochureItems_' + $index() + '__itemNo' }, validationOptions: { errorElementClass: 'input-validation-error' }" class="form-control item-id" />
。私の場合、newItemはどうなるの? – dmikester1
私はこの質問のあなたの他のバージョンに答えました。 http://stackoverflow.com/questions/41600623/knockout-arrayfirst-not-working-as-expected –
ありがとう!重複して申し訳ありません、このようなものをできるだけ早く把握しようとしています。 – dmikester1