如何获得 Knockout 中 observable 的长度?
How to get the length of an observable in Knockout?
我在 knockout 中有一个可观察到的 sizeDetails,我需要在 knockout 模板中获取长度。我的观察值低于
sizeDetails: ko.observable()
在 Ajax 调用成功时,我已将可观察设置如下
self.sizeDetails({sizeGuideDetails: sizeGuideDetails,
shopBySizeDetails: shopBySizeDetails
});
如何在knockout模板中分别获取sizeGuideDetails和shopBySizeDetails的长度
由于键本身是对象,我们必须得到它们的长度,如this。
这更多地是关于 JavaScript 的,而不是 Knockout。要获取 Knockout 可观察对象的值,您可以像调用函数一样调用它。例如:sizeDetails()
。在这种情况下,它将 return 对象,然后我们可以获得单独的大小,并将它们 return 放在一个数组或任何适合你的格式中。
function getSizeDetails(){
const sizeDetailsObject = self.sizeDetails();
let sizes = [];
for (var key in sizeDetailsObject) {
//check if key exists
if (sizeDetailsObject.hasOwnProperty(key)) {
//since key is sure to be an object, get its length like this:
sizes.push(Object.keys(sizeDetailsObject[key]).length);
}
}
return sizes;
};
您还可以创建一个 pure Computed observable,其值会在 sizeDetails
更新时自动更新。
self.sizes = ko.pureComputed(function(){
const sizeDetailsObject = self.sizeDetails();
let sizes = [];
for (var key in sizeDetailsObject) {
if (sizeDetailsObject.hasOwnProperty(key)) {
sizes.push(Object.keys(sizeDetailsObject[key]).length);
}
}
return sizes;
}, self);
现在您随时可以通过调用 self.sizes()
获得最新尺寸。
要单独获取它们的尺寸,您可以按照 Erick 和 Bivo 在他们的回答中提到的那样做。
试试
<div data-bind="html: sizeDetails().sizeGuideDetails.length"></div>
<div data-bind="html: sizeDetails().shopBySizeDetails.length"></div>
sizeDetails().sizeGuideDetails.length
或 sizeDetails().sizeGuideDetails().length
取决于 sizeGuideDetails
是否可观察。与 shopBySizeDetails
.
相同
您可以在 html 中任何您喜欢的地方使用它,例如:
<span data-bind="text: sizeDetails().sizeGuideDetails().length">
或没有任何 html 标签:
<!-- ko if: sizeDetails().sizeGuideDetails().length > 0 -->
一些 html 如果条件为真
<!-- /ko -->
我在 knockout 中有一个可观察到的 sizeDetails,我需要在 knockout 模板中获取长度。我的观察值低于
sizeDetails: ko.observable()
在 Ajax 调用成功时,我已将可观察设置如下
self.sizeDetails({sizeGuideDetails: sizeGuideDetails,
shopBySizeDetails: shopBySizeDetails
});
如何在knockout模板中分别获取sizeGuideDetails和shopBySizeDetails的长度
由于键本身是对象,我们必须得到它们的长度,如this。
这更多地是关于 JavaScript 的,而不是 Knockout。要获取 Knockout 可观察对象的值,您可以像调用函数一样调用它。例如:sizeDetails()
。在这种情况下,它将 return 对象,然后我们可以获得单独的大小,并将它们 return 放在一个数组或任何适合你的格式中。
function getSizeDetails(){
const sizeDetailsObject = self.sizeDetails();
let sizes = [];
for (var key in sizeDetailsObject) {
//check if key exists
if (sizeDetailsObject.hasOwnProperty(key)) {
//since key is sure to be an object, get its length like this:
sizes.push(Object.keys(sizeDetailsObject[key]).length);
}
}
return sizes;
};
您还可以创建一个 pure Computed observable,其值会在 sizeDetails
更新时自动更新。
self.sizes = ko.pureComputed(function(){
const sizeDetailsObject = self.sizeDetails();
let sizes = [];
for (var key in sizeDetailsObject) {
if (sizeDetailsObject.hasOwnProperty(key)) {
sizes.push(Object.keys(sizeDetailsObject[key]).length);
}
}
return sizes;
}, self);
现在您随时可以通过调用 self.sizes()
获得最新尺寸。
要单独获取它们的尺寸,您可以按照 Erick 和 Bivo 在他们的回答中提到的那样做。
试试
<div data-bind="html: sizeDetails().sizeGuideDetails.length"></div>
<div data-bind="html: sizeDetails().shopBySizeDetails.length"></div>
sizeDetails().sizeGuideDetails.length
或 sizeDetails().sizeGuideDetails().length
取决于 sizeGuideDetails
是否可观察。与 shopBySizeDetails
.
您可以在 html 中任何您喜欢的地方使用它,例如:
<span data-bind="text: sizeDetails().sizeGuideDetails().length">
或没有任何 html 标签:
<!-- ko if: sizeDetails().sizeGuideDetails().length > 0 -->
一些 html 如果条件为真
<!-- /ko -->