【问题标题】:How do i set the id in WinJS.Binding.Template in a Win8 App如何在 Win8 应用程序的 WinJS.Binding.Template 中设置 id
【发布时间】:2012-11-29 06:57:57
【问题描述】:

以下 html 不适用于我。

<div id="weightListViewTemplate"  data-win-control="WinJS.Binding.Template">
<span  data-win-bind="innerText: name; id: id"></span>
</div>

<div id="basicListView" style="width:420px;height:600px"  data-win-options="{ itemTemplate: select('#weightListViewTemplate') }"
    data-win-control="WinJS.UI.ListView">
</div>

出现列表,但未在跨度对象上设置 ID 属性。

如何根据datasource/array中对应的值在模板中动态设置span的id?

【问题讨论】:

    标签: windows-8 winjs


    【解决方案1】:

    我不建议使用实际的 ID 属性。我相信你不能通过数据绑定来设置它——我相信 WinJS 在幕后的元素上使用 ID 来允许对 DOM 元素的弱引用。因此,它不允许您设置 ID。

    我建议改用其他属性或属性。

    【讨论】:

    • Dominic 是正确的 - 显式绑定不允许您设置 id 属性。如果您使用绑定,则应该通过更改绑定的数据来操作 DOM,而不是通过查找 DOM 中的扩展。
    • @ChrisTavares 只是好奇,如果我们不使用id,有什么替代方法可以快速访问项目而无需遍历项目以查找item.someProperty === someValue
    • 对于 DOM,这无论如何都帮不了你——除非你使用一些全局 ID 生成器,否则你很容易发生名称冲突。如果您希望找到该元素,则必须为 querySelector 添加一个类、属性或其他属性。
    • @DominicHopton 谢谢回复。我实际上想知道分配项目的唯一属性是否是一个好主意。例如。 item.id = SSN 然后我可以通过SSN 快​​速检索该项目。这有什么缺点吗?
    • 我从未真正发现查询选择器如此昂贵;特别是来自子树。我的意思是,你是在一个紧密的循环中调用它吗?如果是这样,请在进入循环之前缓存该项目并将其捕获在闭包中。不是说“不”,但我认为更多地了解实际需求可能会有所帮助
    猜你喜欢
    • 1970-01-01
    • 2021-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-29
    • 1970-01-01
    相关资源
    最近更新 更多