2016-09-01 83 views
0

我有一個基因敲除可觀察到:self.productBarcode = ko.observable(),我用jquery自動完成在產品列表中搜索,如果發現產品我有一個select事件自動完成功能添加到選定的可觀察對象:訪問屬性的基因敲除

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

UI對象的格式如下:

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

那我需要的是SEL等產品條形碼productBarcode它們具有與ui相同的格式。

問題:如何從可觀察的productBarcode訪問條碼屬性? 我已經試過了如下因素:

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

它我不清楚你在問什麼......期望的行爲是什麼,你現在的代碼有什麼結果? (另外,請注意,您可以通過在'.push'前面省略'()來直接推入'observableArray') – user3297291

+0

我試圖從具有** ui *格式的對象訪問條形碼屬性* – sixfeet

+1

像'obj.item.barcode'? – user3297291

回答

1

當你定義一個ko.observable像這樣:

self.productBarcode = ko.observable(); 

其初始值將是undefined。這意味着,通過做這樣的事情,你不能盲目地訪問它的屬性:

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

這將導致在JavaScript試圖訪問的undefineditem性質,它不能...

你可以檢查undefined,或用較短,但不那麼 「安全」 falsey檢查去:

// 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;