使用 WinJS 进行数据绑定,与淘汰一样强大

Databinding with WinJS as powerful as with knockout?

本文关键字:一样 淘汰 WinJS 数据绑定 使用      更新时间:2023-09-26

我最近开始用HTML/CSS/JS开发Win8应用程序。2 周后,出现了有关使用 WinJS 进行数据绑定的问题:

是否有可能通过 WinJS 执行数据绑定,就像 knockout.js(WinJS 可以做所有可以做的事吗)一样强大?

如果是这样,我将如何仅使用 WinJS 执行淘汰赛的ko.applyBindings()

虽然"同样强大"是相当主观的,但 WinJS 有一个非常强大的绑定引擎。它不一样,但与淘汰赛有一些共同的特点。它以某种方式与以前称为Microsoft ASP.NET Ajax Library共享一些细节。

这是他们的例子之一:

<div id="boundDiv" data-win-bind="innerText: age"></div>
<script type="text/javascript">
    var person = { age: 0 };
    var span = document.getElementById("boundSpan");
    WinJS.Binding.processAll(span, person);
    var bindingPerson = WinJS.Binding.as(person);
    setInterval(function () {
        changeAge(bindingPerson);
    }, 500);
function changeAge(p) {
    p.age++;
};
</script>

每 500 毫秒,div将更新以反映person的新age。由于它利用了 ECMAScript 5 的 Object 属性获取者和设置器,因此可以轻松跟踪年龄的值,然后在div中更新。

在以下帖子中,这两种方法都有一个完整的示例:

http://www.progware.org/Blog/post/Data-binding-in-Windows-8-Apps-with-Knockout.aspxhttp://www.progware.org/Blog/post/Data-binding-in-Windows-81-Apps-with-WinJS.aspx

这两种方法都应用于同一个视图模型,并且所有内容都得到支持(双向绑定、转换器等)。

WinJS 中不幸缺少的一件事是双向数据绑定。因此,您必须编写一些代码,以便将 UI 中的用户输入返回到视图模型中。

因此,您可以像 SDK 示例中一样为控件实现更改处理程序,也可以使用表达式混合博客中更通用的解决方案