【问题标题】:Unobtrusive Knockout Template Question不显眼的淘汰赛模板问题
【发布时间】:2011-07-12 17:31:44
【问题描述】:

我一直在试验一个不显眼的 Knockout 数据绑定 jQuery 插件。点击链接here

不过,我似乎无法弄清楚如何将“数据绑定”属性保留在模板之外。我也无法决定是否应该这样做。我只是有预感。

示例模板:

<script id="storeTemplate" type="text/x-jquery-tmpl">
    <li>
        <div class="storeTitle" data-bind="click: select">${storeTitle}</div>
    </li>
</script>

我认为将data-bind="click: select" 从那里拉出来可能是个好主意。有谁知道如何做到这一点?我试过$(".storeTitle").dataBind( { click: "select" } ); jQuery 选择器只选择已经在 DOM 中创建的对象,但我们要编辑的元素还不是 DOM 的一部分。另外,我想避免多次应用绑定。

【问题讨论】:

  • 我刚刚检查了代码,我看不出插件无法在模板中运行的任何原因。您需要使用 $(".storeTitle").dataBind( { click: "select" } ); 以相同的方式进行操作
  • 我不太清楚你的意思。我之前尝试过上面的行(也再次尝试过),但它对我不起作用。我也浏览了插件,它只选择已经在 DOM 中创建的对象,就像 jQuery 通常那样。我会稍微更新一下我的问题。

标签: javascript jquery html knockout.js jquery-templates


【解决方案1】:

看来我只是回答了我自己的问题。考虑到模板中的元素实际上位于 DOM 中(只是字符串形式),我可以只修改字符串并添加 data-bind="click: select"。一位同事建议我暂时将模板文本作为 innerHTML 插入以将其添加到 DOM,使用插件对其进行修改,将修改后的版本作为文本插入回模板并应用绑定,而不是进行字符串操作。

【讨论】:

  • 只要确保你在 IE 中测试它:) IE 似乎对编辑现有脚本元素的文本有点挑剔。否则,我会建议类似:jsfiddle.net/rniemeyer/5dkMg 将它们加载到 jQuery 对象中,而不是实际将它们插入到 DOM 中。
  • @RP Niemeyer - 非常感谢这个提示!我刚刚注意到我编写的代码在 IE 中不起作用
  • 我发现IE
猜你喜欢
  • 2012-11-07
  • 2016-02-27
  • 1970-01-01
  • 2014-03-31
  • 2018-09-05
  • 2011-08-11
  • 1970-01-01
  • 1970-01-01
  • 2015-03-30
相关资源
最近更新 更多