2016-09-01 4 views
0

Ich habe eine Knockout beobachtbar: self.productBarcode = ko.observable(), und ich benutze jquery Autocomplete, um in einer Liste von Produkten zu suchen, wenn die Produkte gefunden werden, ich habe ein ausgewähltes Ereignis inZugriff auf Eigenschaften von Knockout beobachtbar

select: function (event, ui) { 
       updateElementValueWithLabel(event, ui); 
       self.productBarcode(ui); 

das ui Objekt hat folgendes Format:

ui 
{ 
    item 
    { 
     barcode: "2" 
     label: "p1" 
     value: "p1" 
    } 
} 

Dann, was ich brauche, ist zu sel die Funktion zum automatischen Vervollständigung des Objekt ausgewählt, um die beobachtbaren hinzufügen ect das Produkt Barcode von der productBarcode, die das gleiche Format wie ui haben.

Problem: Wie kann ich die Barcode-Eigenschaft aus dem beobachtbaren productBarcode zugreifen? Ich habe versucht, die Folowing:

self.addNewSale = function() { 
    var placeNewSale = { 
     StoreId: self.SaleStoreObject().Id, 
     StoreName: self.SaleStoreObject().Name, 
     ProductBarcode: self.productBarcode().barcode, 
     ProductName: self.productBarcode().label, 
     Quantity: self.newSale.Quantity() 
    } 

    self.placeSaleProducts().push(placeNewSale); 
    self.placeSaleProducts(self.placeSaleProducts()); 
} 
+0

Es mir ist nicht ganz klar, was du fragst ... Was ist das erwartete Verhalten und was ist das Ergebnis deines aktuellen Codes? (Beachten Sie auch, dass Sie direkt zu einem 'ObservableArray' wechseln können, indem Sie' 'vor' 'push' weglassen) – user3297291

+0

Ich versuche auf die Barcode-Eigenschaft von einem Objekt zuzugreifen, welches das Format des ** ui * hat * – sixfeet

+1

Wie 'obj.item.barcode'? – user3297291

Antwort

1

Wenn Sie definieren eine ko.observable wie so:

self.productBarcode = ko.observable(); 

seinen Anfangswert undefined sein wird. Das heißt, Sie können nicht blind seine Eigenschaften zugreifen, indem Sie wie etwas zu tun:

var currentBarcode = self.productBarcode().item.barcode; 

Dieses in Javascript würde versuchen, die item Eigenschaft undefined zuzugreifen, die es nicht können ...

Sie überprüfen könnten, für undefined oder mit einem kürzeren, aber weniger "sicheren" Falsey-Check gehen:

// Option 1: Explicitly check for undefined: 
var current = self.productBarcode(), 
    currentBarcode = (typeof current !== "undefined") ? current.item.barcode : null; 
// Option 2: Check if there's "something truthy" in the observable 
var current = self.productBarcode(), 
    currentBarcode = current ? current.item.barcode : null; 
Verwandte Themen