我有一个淘汰观察: 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());
}
答案 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;