对象UI中的Nativescript Observable对象未更新



我对原生描述很陌生,对可观察对象中的可观察对象有一个问题。

我有一个带抽屉的应用程序。每个页面都通过其navigationContext从抽屉页面获取其绑定上下文。我需要一些存储在页面中的数据。所以每一页的bindingContext看起来都是这样的。。。

const viewModel = observableModule.fromObjectRecursive({
local_var1: "something as string",
local_var2: true,
globaldata: { global_var1: "global string",  global_var2: true }
});

在我的xml文件中,我可以毫无问题地绑定到globaldata.global_var2。我用它来使某些部分可见或折叠。globaldata.global_var2的内容发生更改时,UI不会更新。我试着用.set("var",true(和直接设置变量。但用户界面并没有改变。为了进行测试,我尝试使用local_var2,通过这种方式,UI正在更新。

我还创建了一个非常小的游乐场。。。。

https://play.nativescript.org/?template=play-js&id=9dn3Yk&v=10

有人能向我解释一下,为什么对可观察对象内部的可观察对象的更改没有反映在UI中?

提前感谢并致以最良好的问候ingo

我在你的操场上看到了两个问题,修复这两个问题似乎可以使它按预期工作。首先,home-view-model.js中的此代码需要更改:

var viewModel = observableModule.fromObjectRecursive({
test: { boolShow = false }
});

这应该是boolShow: false,或者至少对我来说是成功运行的,而现有版本没有。

顺便说一下,我注意到homepage.xml中对test.boolShow的引用都使用了表达式:

visibility="{{ test.boolShow ? 'visible' : 'collapsed' }}"

text="{{ 'Touch me! ' + test.boolShow }}"

NativeScript从被引用的属性中侦听更改事件,但由于某种原因,它无法从表达式中解析它,即使它知道足够的信息来计算表达式。我看到的解决方法是先放属性键,然后放逗号,然后放表达式,如下所示:

visibility="{{ test.boolShow, test.boolShow ? 'visible' : 'collapsed' }}"

text="{{ test.boolShow, 'Touch me! ' + test.boolShow }}"

如果您这样做,您应该看到接口正在正确更新。我还没有看到任何关于表达式语法的好文档,但如果你把它看作是逗号运算符的使用,上面的内容是有意义的,它计算左侧,但只返回右侧。

不过,我很想看到更好的文档,因为我发现绑定系统的代码很难遵循,而且我看到的示例只涉及特定的情况,留下了许多问题没有得到解答。例如,我们可以/应该在表达式之前添加多个属性值吗?如果我提到a.b.cabc都需要是可观察的吗?或者如果只有ac,它会起作用吗?如果能看到更全面的文档,那就太好了,因为这个功能被大量使用,如果使用不当,会产生明显的后果。

编辑:

再次查看文档,我对逗号运算符的评论是错误的,因为数据绑定实际上接受1、2或3个参数。然而,文档似乎仍然没有回答我上面悬而未决的问题。

最新更新