2017-01-12 78 views
0

我有一個表是可觀察項目的observablearray。每一行中的第一項是項目編號。我加載我的頁面可能有10行現有數據。我嘗試添加一行新的數據。我輸入產品編號並標籤。當發生這種情況時,它會運行一次檢查來查看它是否已經在數組中,因此它不會讓用戶添加多個相同的項目編號。那麼,因爲它是可觀察的,我假設它會立即被添加到數組中,因爲我輸入或可能當我標籤出來。因此,檢查是總是返回true。knockoutjs - 檢查數組中是否存在項總是返回true

這裏是我的函數,它檢查:

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

相關問題