2017-01-12 7 views
0

私は観察可能なアイテムの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" /> 

答えて

1

チェック。 itemNoがどこから来るのかは不明です。 self.itemsのいずれかのメンバーである必要があります。また、あなたの名前は幾分後方にあります:newItemは実際に比較される既存のアイテムです。

新しいアイテムがnewItemであれば、あなたの比較は次のようになります。私は、コンテキストのために少しより多くのコードを追加し

var match = ko.utils.arrayFirst(self.items(), function(oldItem) { 
    return newItem !== oldItem && newItem.itemNo() === oldItem.itemNo(); 
}); 
+0

。私の場合、newItemはどうなるの? – dmikester1

+0

私はこの質問のあなたの他のバージョンに答えました。 http://stackoverflow.com/questions/41600623/knockout-arrayfirst-not-working-as-expected –

+0

ありがとう!重複して申し訳ありません、このようなものをできるだけ早く把握しようとしています。 – dmikester1

関連する問題