访问属性的淘汰观察

时间:2016-09-01 07:22:31

标签: javascript jquery knockout.js

我有一个淘汰观察: self.productBarcode = ko.observable(),我使用jquery自动完成来搜索产品列表,如果找到产品我有一个选择事件自动完成功能,用于将所选对象添加到observable:

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

ui 对象具有以下格式:

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

然后我需要从 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());
} 

1 个答案:

答案 0 :(得分:1)

如此定义ko.observable

self.productBarcode = ko.observable();

其初始值为undefined。这意味着您不能通过执行以下操作来盲目访问其属性:

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

这会导致javascript尝试访问item undefined的{​​{1}}属性,但不能... {/ p>

您可以查看undefined,或选择较短但不太“安全”的假检查:

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