【问题标题】:WinJS, data-win-bind for script controlled binding?WinJS,用于脚本控制绑定的数据-win-bind?
【发布时间】:2013-02-16 04:59:33
【问题描述】:

我正在使用 HTML5/Javascript 开发 Windows 8 应用程序。我创建了一个自定义控件,它使用一堆 DIV 来显示内容,每个 DIV 都使用WinJS.Binding.Template 呈现。设置接近这个问题的答案:WinJS.UI.ListView customize list item content?

绑定数据接近:

[
    {
        "title": "title name",
        "allow_action": false
        "action_type": "go"
    },
    ...
]

我的模板接近:

<div id="entry" data-win-control="WinJS.Binding.Template">
    <div data-win-bind="textContent: title">
    </div>
    <a class="action">Action</a>
</div>

绑定后,我想:

  1. 根据allow_actionaction_type的值更改a.actionclassName
  2. 根据绑定数据的内容,在绑定时将事件 (addEventListener) 附加到 a.action。这包括allow_actionaction_type 和其他值。

基本上,我希望有一个绑定前或绑定后的回调函数,将元素和绑定数据作为参数。转换器似乎无法做到这一点,因为转换器不允许您访问其他字段。

与此同时,我在 render 之后使用 DOM 手动处理这些事情。我想知道是否有更好的选择。谢谢。

更新

根据 cmets 中的 @GotDibbs 和 @RSW 的建议,我设法使用来自 Sending multiple parameters to WinJS.Binding.converter() function 的解决方案解决了问题 #1。我想知道#2 是否仍然可行?

【问题讨论】:

  • 如果您将某些东西绑定到this 而不是特定属性,您可以从转换器访问您的整个模型。此外,我知道没有预绑定或绑定后回调函数缺少从 WinJS.Binding.processAll() 返回的承诺。您可能需要考虑在要绑定的对象上设置 CSS 类名称和事件处理程序。
  • 你能给我一个关于这种转换器的例子吗?
  • 他在这里举了一个绑定到“this”的例子:stackoverflow.com/a/14715804/1309005
  • @RSW,非常感谢。我设法从 stackoverflow.com/questions/14713927/… 在我自己的项目中获得解决方案。
  • 我不在一台能够尝试这个的计算机上,但是你不能为你想要处理的事件设置一个绑定,再次使用this将它绑定到你的模型,并使用转换器将其重定向到您要使用的实际处理程序?

标签: javascript html windows-8 winjs


【解决方案1】:

您应该能够通过将所需元素上的 event 和 className 属性绑定到您的模型来实现您正在寻找的东西,就像在 cmets 中提到的 previous answer 一样。因此假设你想绑定点击事件,你的锚标签看起来更像这样:

...
<a data-win-bind="className: this Converters.getItemClassName; onclick: this Converters.getItemClickHandler">Action</a>
...

【讨论】:

  • 谢谢。我不知道我也可以绑定 onclick。这无疑是一个优雅的解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多