使用ko:if-binding敲除绑定提供程序预处理器
Knockout binding provider preprocessor with ko:if binding
我一直在尝试使用Knockout的bindingProvider
API来绑定自定义元素,这实际上是一个实验,看看我是否可以使模板更具可读性。
我的处理器通常工作得很好,至少对大多数绑定来说是这样,但对if绑定来说,它不起作用。
标记为:
<k-o text="Text" click="clickHandler"></k-o>
<k-o if="IsShowing"><!-- Doesn't work -->
<p>
Hello 1!
</p>
</k-o>
<span data-bind="if: IsShowing"><!-- Works -->
<p>
Hello 2!
</p>
</span>
代码是:
ko.bindingProvider.instance.preprocessNode = function(node)
{
if (node.nodeName == 'K-O')
{
var el = document.createElement('span');
var att = document.createAttribute('data-bind');
var attvals = [];
for(var i = 0; i < node.attributes.length; i++)
attvals.push(node.attributes[i].name + ': ' + node.attributes[i].value);
att.value = attvals.join(', ');
el.setAttributeNode(att);
node.parentNode.replaceChild(el, node);
return el;
}
}
演示Fiddle:https://jsfiddle.net/whelkaholism/wzqL64ga/
因此,文本绑定和点击绑定可以很好地工作,但如果我检查对象检查器和生成的if节点是否与硬编码的相同,那么只有硬编码的节点可以工作。
(此用例用于后端数据库访问应用程序,使功能模板在开发中更加清晰。任何SEO或自定义元素的相关问题都不相关)
您刚刚忘记了一件事:
el.innerHTML = node.innerHTML;
https://jsfiddle.net/wzqL64ga/8/
相关文章:
- Webpack/Rect:遵循egghead.io教程,但出现错误:您可能需要一个合适的加载程序来处理此文件类型
- Javascript 二进制搜索/插入预处理
- 使用自定义数据属性或将数据绑定到处理程序来处理事件
- 如何在phonegap应用程序中处理Ajax json响应
- 在基于Strophe.js的聊天应用程序中处理状态
- 节点.js未捕获的异常类型错误:无法设置未定义的预处理 ''
- 克隆内容,附加和预处理
- 是否有任何方法可以像处理jQuery中附加到XHR延迟对象的done方法处理程序一样处理websocket onmess
- "npm运行构建“;模块解析错误”;您可能需要一个适当的加载程序来处理此文件类型&”;
- iOS版离线Jquery Mobile应用程序中处理导航的正确方法
- 如何在React应用程序中处理权限检查(Redux中的状态维护)
- 上传到FTP之前预处理文件
- 使用jQuery破解上传程序以处理大文件
- 2秒后删除新的jQuery预处理节点
- 防止通过父元素处理程序触发处理程序
- Webpack错误:“您可能需要一个适当的加载程序来处理此文件类型”
- Webpack:您可能需要一个适当的加载程序来处理此文件类型
- Web工作程序在处理大型数组时内存不足
- 无法使用节点预处理程序重建串行端口:404状态代码下载64位nw.lib
- 是否有任何用于开发的http代理,在应用程序响应之前触发诸如预处理js之类的任务