具有已编译视图模型对象的深层链接路径
Deep chained paths with compiled view model objects
给定使用此数据实例化的编译视图模型层次结构:
"applications":[
{
"application_id":1,
"name":"Test Application 1",
"description":"An Application For Testing",
"settings":[
{
"name":"Application 1 Setting Key 1",
"value":"Application 1 Setting Value 1"
}
],
"projects":[
{
"project_id":1,
"name":"Test Project 1",
"description":"A project for testing 1",
"settings":[
{
"name":"Project 1 Setting Key 1",
"value":"Project 1 Setting Value 1"
}
]
}
]
}
]
我很难利用树中更下方级别的可观察对象。
观察应用程序属性的变化没有问题:
$.observe(data.applications(), ".[]^*", ...
但是如何更改应用程序下设置的属性?这些都是失败的:
$.observe(data.applications().settings(), ".[]^*", ...
$.observe(data.applications(), ".settings.[]^*", ...
$.observe(data.applications(), ".settings().[]^*", ...
我看到文档特别提到括号不会像上一个示例那样在链式路径中工作,因此对最后一个示例没有太大希望。
我似乎可以摆脱这个:
$.observe(data.applications(), ".[]._settings.[]^*", ...
如果这是唯一的方法,请确认,但下划线让我觉得我已经进入了数据路径的 underlying/protected/unofficial 表示。链接编译的虚拟机路径的任何其他方式?
鉴于 applications()
returns 是一个数组,settings()
也是,你不能写:
$.observe(data.applications().settings(), "[]^*", ...
如果你想针对特定的应用程序,例如data.applications()[0]
,你可以写:
$.observe(data.applications()[0].settings(), "[]^*", ...
如果要针对任意应用下的所有设置属性,可以这样写:
$.observe(data.applications(), "[]._settings.[]^*", ...
你是对的 _settings
应该是 'internal'。预期的设计确实是让你写:
$.observe(data.applications(), "[].settings.[]^*", ...
但是目前有一个错误阻止了它的工作。即将发布的更新将修复此错误,或提出略有不同的模式。现在最好继续使用 _settings
,无论如何它将在下一次更新后继续工作。在下一次更新后,还要注意有关 [].*
通配符和其他相关功能的可能的新文档主题...
顺便说一句,如果你想在修改更高层的数据层次结构后收听变化(例如 applications()
数组 - 你可能会使用 merge() feature 来更改虚拟机),那么你将需要将 ^
放在路径中的适当级别,以收听该级别以下的任何更改。例如你可以写
$.observe(data.applications(), "[]^_settings.[].*", ...
或
$.observe(data.applications(), "^[]._settings.[].*", ...
或
$.observe(data, "_applications^[]._settings.[].*", ...
另一个选项是 **
通配符 - 您可以在任何级别使用它来显示该级别以下的所有更改:
$.observe(data.applications(), "**", ...
或
$.observe(data, "**", ...
或
$.observe(data, "_applications^[].**", ...
给定使用此数据实例化的编译视图模型层次结构:
"applications":[
{
"application_id":1,
"name":"Test Application 1",
"description":"An Application For Testing",
"settings":[
{
"name":"Application 1 Setting Key 1",
"value":"Application 1 Setting Value 1"
}
],
"projects":[
{
"project_id":1,
"name":"Test Project 1",
"description":"A project for testing 1",
"settings":[
{
"name":"Project 1 Setting Key 1",
"value":"Project 1 Setting Value 1"
}
]
}
]
}
]
我很难利用树中更下方级别的可观察对象。
观察应用程序属性的变化没有问题:
$.observe(data.applications(), ".[]^*", ...
但是如何更改应用程序下设置的属性?这些都是失败的:
$.observe(data.applications().settings(), ".[]^*", ...
$.observe(data.applications(), ".settings.[]^*", ...
$.observe(data.applications(), ".settings().[]^*", ...
我看到文档特别提到括号不会像上一个示例那样在链式路径中工作,因此对最后一个示例没有太大希望。
我似乎可以摆脱这个:
$.observe(data.applications(), ".[]._settings.[]^*", ...
如果这是唯一的方法,请确认,但下划线让我觉得我已经进入了数据路径的 underlying/protected/unofficial 表示。链接编译的虚拟机路径的任何其他方式?
鉴于 applications()
returns 是一个数组,settings()
也是,你不能写:
$.observe(data.applications().settings(), "[]^*", ...
如果你想针对特定的应用程序,例如data.applications()[0]
,你可以写:
$.observe(data.applications()[0].settings(), "[]^*", ...
如果要针对任意应用下的所有设置属性,可以这样写:
$.observe(data.applications(), "[]._settings.[]^*", ...
你是对的 _settings
应该是 'internal'。预期的设计确实是让你写:
$.observe(data.applications(), "[].settings.[]^*", ...
但是目前有一个错误阻止了它的工作。即将发布的更新将修复此错误,或提出略有不同的模式。现在最好继续使用 _settings
,无论如何它将在下一次更新后继续工作。在下一次更新后,还要注意有关 [].*
通配符和其他相关功能的可能的新文档主题...
顺便说一句,如果你想在修改更高层的数据层次结构后收听变化(例如 applications()
数组 - 你可能会使用 merge() feature 来更改虚拟机),那么你将需要将 ^
放在路径中的适当级别,以收听该级别以下的任何更改。例如你可以写
$.observe(data.applications(), "[]^_settings.[].*", ...
或
$.observe(data.applications(), "^[]._settings.[].*", ...
或
$.observe(data, "_applications^[]._settings.[].*", ...
另一个选项是 **
通配符 - 您可以在任何级别使用它来显示该级别以下的所有更改:
$.observe(data.applications(), "**", ...
或
$.observe(data, "**", ...
或
$.observe(data, "_applications^[].**", ...