【问题标题】:Data binding to observable in metro style app with javascript使用 javascript 将数据绑定到 Metro 风格应用程序中的 observable
【发布时间】:2012-05-15 14:34:44
【问题描述】:

我在 Windows 8 上的 Metro JavaScript 应用程序中遇到数据绑定问题。

在 *构建 xxxx *

我创造了我想绑定的价值

var someValue = WinJS.Binding.as({ primitive : 1 }); 

我实际上已经把它放在全局范围内以排除事情

然后只需设置一个简单的回调以每 5 秒更新一次此值

setInterval(function () { someValue. primitive++ }, 5000);
WinJS.Binding.processAll();

这是在页面js文件的ready函数中

然后在 HTML 文件中只是一个简单的 h1 标记

<h1 data-win-bind="innerText : someValue.primitive">Test</h1>

当此页面运行时,它最初会进行数据绑定 - 因此 h1 标记显示 1 但从不显示其他任何内容。回调确实受到打击,并且在任何时候我都可以检查 someValue 并且它看起来正确。我尝试在 someValue 对象上使用 setProperty 和 updateProperty,但没有任何区别。

如有任何建议,我将不胜感激。谢谢!

【问题讨论】:

  • 我还不知道答案,但只是想提一下,您确定要在公共论坛上发布有关构建的任何内容吗?没有与之相关的 NDA 吗?
  • 不知道。不过谢谢。这让它工作:HTML:&lt;h1 data-win-bind="innerText : primitive"&gt;Test&lt;/h1&gt; js:WinJS.Binding.processAll(document.body, someValue);

标签: javascript windows-8 winjs


【解决方案1】:

这似乎是全局的问题。我尝试了其他一些方法,但您似乎无法将数据绑定到具有全局范围的对象。

<h1 data-win-bind="innerText : variable">Test</h1>

“变量”不能在全局范围内,如果您要绑定的变量具有全局范围,它就会中断。

但如果你只是命名空间是说 variable.variable 那么它可以工作 - 但是因为它已经被命名空间所以你必须将它作为数据上下文传递。

WinJS.Binding.processAll(document.body, 变量)

我的问题是我有一个 ViewModel.Login、ViewModel.Basket 对象,我只想绑定 ViewModel,然后将相关部分绑定到他们需要的位。

// ViewModel.Test.test.guidePrice = "£3.00";

作品 &lt;h1 data-win-bind="innerText : test.guidePrice"&gt;Test&lt;/h1&gt; WinJS.Binding.processAll(document.getElementById('basketPrice'),ViewModel.Test);

不起作用 &lt;h1 data-win-bind="innerText : Test.test.guidePrice"&gt;Test&lt;/h1&gt; WinJS.Binding.processAll(document.getElementById('basketPrice'),ViewModel);

希望这对遇到相同/相似问题的人有所帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-21
    相关资源
    最近更新 更多