Bixby Developer Center

Guides
References

Lazy Property

정의 및 구현

경우에 따라 Search action을 수행하는 동안 구조체가 호출될 때마다 property를 채우는 데 너무 많은 시간과 리소스가 소요될 수 있습니다. Lazy propertylazy-source 키(key)를 사용하여 필요할 때만 이러한 property를 호출하도록 해 줍니다. 매번 채울 필요가 없는 property에 대해서는, 요청이 있을 때 해당 데이터와 비동기식으로 호출되는 Fetch action에 Lazy property를 연결할 수 있습니다. 이 경우, Bixby는 예를 들어 Details layout이나 구조체의 특정 dialog에서 이 Fetch action을 호출하게 됩니다.

property (%name%) {
type (%type%)
lazy-source (%lazy-action%)
}

예제

Lazy property를 사용하는 예제는 lazy-source 참조 페이지에서 확인할 수 있습니다. 이 예제에서 Hotel 구조체는 사용자가 호텔에 대한 추가 정보를 원할 때에만 채워지는 HotelDetails property를 가지며, HotelDetails를 가져오기 위해 GetHotelDetails action을 사용합니다.

신발 샘플 캡슐에서도 Lazy property가 사용됩니다. Shoe 구조체는 accessories를 Lazy property로 갖습니다.

  property (accessories) {
description (A list of accessories for a shoe.)
type (Accessory)
min (Optional) max(Many)
lazy-source (FindAccessories)
}

View on GitHub

Shoe 구조체에는 사용 가능한 액세서리가 수백 개 있을 수 있는데, 이러한 추가 정보는 사용자가 카탈로그를 탐색하는 동안 반드시 필요한 것은 아니므로 accessories를 Lazy property로 설정해 두면 사용자는 물론이고 시스템도 시간을 절약할 수 있습니다.

FindAccessories action은 호출 시 각 신발의 액세서리 데이터를 가져옵니다.

action (FindAccessories) {
type (Fetch)
collect {
input (shoe) {
type (Shoe)
min (Required)
prompt-behavior (AlwaysSelection)
}
}
output (Accessory)
}

View on GitHub

Shoe의 Details view에서처럼 데이터가 실제로 생성되어야 할 때는 일반적으로 property가 호출되고 planner가 해당 정보를 얻기 위한 FindAccessories action을 호출합니다.

layout-macro-def (shoe-accessories) {
params {
param (shoe) {
type (Shoe)
min (Required) max (One)
}
}
content {
section {
title ("Accessories")
content {
partitioned {
content {
for-each (shoe.accessories) {
as (accessory) {
cell-area {
slot1 {
image {
shape (Circle)
url {
template ("/images/red-shoe-icon.png")
}
}
}
slot2 {
content {
order (PrimarySecondary)
primary {
template ("#{value(accessory.name)}")
}
secondary {
template ("#{value(accessory.details)}")
}
}
}
}
}
}
}
}
}
}
}
}

View on GitHub