設定功能可讓元件定義、路由及使用設定值。使用設定功能的元件會在其結構化設定中看到該值。
定義設定功能
如要定義設定能力,元件必須新增 capabilities
宣告
:
{
capabilities: [
{
config: "fuchsia.config.MyBool",
type: "bool",
value: true,
},
],
}
這會以 true
的值定義 bool
類型的 fuchsia.config.MyBool
能力。
詳情請參閱功能參考資料
請參閱 type
和 value
支援的欄位。
轉送設定功能
元件路徑設定功能,方法是將公開元件至 家長或為他們提供福利給孩子。
如要進一步瞭解架構如何轉送元件功能, 請參閱功能轉送。
公開
公開設定功能可讓元件的父項存取該功能:
{
expose: [
{
config: "fuchsia.config.MyBool",
from: "self",
},
],
}
您可以選擇指定下列項目:
提供
提供設定功能可讓子元件存取該功能:
{
offer: [
{
config: "fuchsia.config.MyBool",
from: "parent",
to: [ "#child-a", "#child-b" ],
},
],
}
您可以選擇指定下列項目:
使用設定功能
如要使用設定功能,元件必須新增 use
定義,將功能連結至結構化設定值。接著,元件就能讀取
實作結構化設定,查看能力的值
請考慮使用下列結構化設定區塊的元件:
json5
{
config: {
say_hello: { type: "bool" },
},
}
如要使用設定功能,請為其新增 use
宣告:
{
use: [
{
config: "fuchsia.config.MyBool",
key: "say_hello",
from: "parent",
},
],
}
元件讀取結構化設定的 say_hello
欄位時,會收到 fuchsia.config.MyBool
的值。
您可以選擇指定下列項目:
正在重新命名
您可以使用其他名稱expose
或offer
功能:
{
offer: [
{
config: "fuchsia.config.MyBool",
from: "#child-a",
to: [ "#child-b" ],
as: "fuchsia.childB.SayHello",
},
],
}
設定類型
設定值支援多種類型。
無符號整數的類型如下:
uint8
uint16
uint32
uint64
帶正負號整數分為下列類型:
int8
int16
int32
int64
bool
類型支援 true
或 false
的值。
有 string
類型,除了字串值外,必須設定 max_size
。
字串示例:
{
capabilities: [
{
config: "fuchsia.config.MyString",
type: "string",
max_size: 100,
value: "test",
},
]
}
有 vector
類型,必須一併設定含有 type
的 element
欄位。向量可以
包含所有其他類型的類型 (向量除外)。
向量範例:
{
capabilities: [
{
config: "fuchsia.config.MyUint8Vector",
type: "vector",
element: { type: "uint8" },
max_count: 100,
value: [1, 2, 3 ],
},
{
config: "fuchsia.config.MyStringVector",
type: "vector",
element: {
type: "string",
max_size: 100,
},
max_count: 100,
value: [
"Hello",
"World!",
],
},
],
}
選用路由
Use
、Offer
和 Expose
支援設定功能可用性。也就是說
元件則可 optionally
使用設定能力。詳情請參閱使用選用功能
預設值
如果選擇轉送設定能力,則來自 void
的路徑表示
系統會提供預設值如果未提供預設值,就會發生指定選用設定功能的錯誤。
您可以透過兩種方式指定預設值。
在 CML 檔案中定義預設值
定義預設值最簡單的方式,就是在 CML 中使用 default
關鍵字指定預設值。
例如:
{
use: {
config: "fuchsia.config.MyInt",
key: "my_int",
type: "int8",
availability: "optional",
default: 42,
}
}
如果已轉送,fuchsia.config.MyInt
會收到預設值 42
出發地:void
。
系統一律會採用 CML 檔案的預設值,而非下一個章節中定義的結構化設定預設值。
(舊版) 結構化設定做為預設值
舊版定義預設值的方式,是將預設值納入元件套件中,做為結構化設定。
例如:
{
use: {
config: "fuchsia.config.MyInt",
key: "my_int",
type: "int8",
availability: "optional",
}
config: {
my_int: {
type: "int8"
},
}
}
在上例中,fuchsia.config.MyInt
會用於 my_int
,並與 config
區塊中的設定值相符。接著,開發人員就能
現有的結構化設定工具
元件套件中,將要用作預設值的設定檔
值。
請注意,這種做法一律會在 CML 檔案中直接指定 default:
而遭到覆寫。
解決路徑和損壞路線
結構化設定值會在元件啟動時交給元件。這表示元件架構必須解析 才能啟動該元件
這項副作用表示元件架構無法啟動
路徑(未成功以
能力定義)。舉例來說,如果您要求 fuchsai.config.MyBool
,但家長未提供,您就無法開始使用。這與其他功能不同,因為元件會在執行階段發現可能不存在的功能。
更新設定值
由於設定值啟動時會交給元件,因此元件 如果能力路徑在元件執行期間有所變更,將不會出現任何更新。
如要啟動採用不同設定的元件,您必須符合以下條件: 發生:
1) 更新提供設定功能的 CML (可能會透過重新解析來更新)。2) 停止,然後啟動正在使用設定能力的元件。