如何获取使用特定剔除绑定的所有元素的列表?

2024-01-31

The 淘汰赛网站 http://knockoutjs.com/documentation/custom-bindings.html告诉我们如何从特定元素的自定义绑定内部访问该元素的所有绑定。

不过,我想获取应用特定命名绑定的所有元素的列表。这可以通过淘汰赛的方法实现吗?

例如,我想向 knockout 请求我的页面上使用可见绑定的所有元素的列表。


有趣的问题!

我要出去告诉你你需要做DOM遍历 https://stackoverflow.com/q/4256339/419956你自己。没有任何 Knockout 实用程序可以完全满足您的要求。即便如此,你也必须深入KO。这是基于一些经验以及仔细观察KO TypeScript 定义 https://github.com/borisyankov/DefinitelyTyped/blob/1.3.0/knockout/knockout.d.ts(这可能是 KO 导出功能的近乎完整的概述)。

看着相关位 https://github.com/borisyankov/DefinitelyTyped/blob/1.3.0/knockout/knockout.d.ts#L554在定义中,您可以利用KnockoutBindingProvider像这样:

var vm = {
  submodel: {
    name: ko.observable('apple'),
    description: ko.observable('fruit')
  },
  elementsWithTextBindings: ko.observable('')
};

vm.refresh = function() {
  var result = "";
  var all = document.getElementsByTagName("*");
  
  for (var i=0, max=all.length; i < max; i++) {
    var ctx = ko.contextFor(all[i]);
    
    if (ko.bindingProvider['instance'].nodeHasBindings(all[i])
        && !!ko.bindingProvider['instance'].getBindings(all[i], ctx).text) {
      var bindings = ko.bindingProvider['instance'].getBindingsString(all[i], ctx);
      result += "Elem with id=" + all[i].id + " has `text` binding ('" + bindings + "').\n";
    }
  }
  vm.elementsWithTextBindings(result);
};

ko.applyBindings(vm);
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script>
<div id="a" data-bind="with: submodel">
  <p id="b" data-bind="text: name, style: { color: 'red' }"></p>
  <p id="c" data-bind="text: description"></p>
  <input id="d" data-bind="value: name" />
</div>
All elements with `text` bindings:
<button id="e" data-bind="click: refresh">refresh!</button>
<pre id="f" data-bind="text: elementsWithTextBindings"></pre>

这利用了您可以到达的事实ko.bindingProvider从外部。这似乎是按设计 https://github.com/knockout/knockout/blob/v3.2.0/src/binding/bindingProvider.js#L73,因为源将其导出为:

ko.exportSymbol('bindingProvider', ko.bindingProvider);

在我的代码中我还利用nodeHasBindings, and getBindings, and getBindingsString。后者有一条评论 https://github.com/knockout/knockout/blob/v3.2.0/src/binding/bindingProvider.js#L32:

// The following function is only used internally by this default provider.
// It's not part of the interface definition for a general binding provider.

所以我假设前两种方法are公共接口的一部分,因此可以安全地用于您的目的。这getBindingsString无论如何,对于您的目的来说并不是真正必要的,但我只是为了示例而将其包含在示例中。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何获取使用特定剔除绑定的所有元素的列表? 的相关文章

  • 在模板内对 $data 进行双向绑定

    我正在尝试设置通用的 Knockout 模板 可以根据数据类型在编辑和只读模式之间切换 如果您曾经使用过 ASP NET 的动态数据 它就像它们的字段模板 例如 这是这样使用的
  • KnockoutJS 的购物车逻辑(?)问题

    The Goal 制作动态产品列表 场景 我有一个包含产品的购物应用程序 当我点击add button的产品 我想在侧边栏中显示我添加的产品 问题总结 您只需阅读此内容 我的代码中有以下代码ProductsSummary Index csh
  • ko.mapping 创建函数,扩展对象

    是否可以在映射过程中修改对象的模式 由于缺乏更好的术语 我想是的 我似乎无法让它发挥作用 我正在尝试这样的事情 var data itemOne someData itemTwo moreData var mapping newItem c
  • 指定网格中的默认排序

    使用knockout kendo绑定绑定Telerik Kendo网格时是否可以指定默认排序 我像这样绑定网格 kendoGrid data grid Rows sortable allowUnsort false mode single
  • 制作一个没有 new 关键字的 javascript 淘汰视图模型

    我正在浏览淘汰教程 所有示例都使用 new 关键字创建视图模型 from learn knockoutjs com function AppViewModel this firstName ko observable Bert this l
  • 如何使用样式数据绑定?

    我在 KnockoutJS 中使用样式绑定时遇到困难 div div 渲染该模板
  • 如何使用淘汰赛映射插件添加新项目

    我正在尝试一个淘汰制图样本 我想我已经快完成了 我似乎无法向 viewModel foos 添加新的 Foo 谁能看到我在这里错过了什么 var Foo function data var self this self id data id
  • 何时使用 ko.utils.unwrapObservable?

    我使用 KnockoutJS 编写了一些自定义绑定 我仍然不确定何时使用ko utils unwrapObservable item 查看代码 该调用基本上检查是否item是一个可观察的 如果是 则返回value 如果不是 则返回value
  • 单击鼠标更改 Knockout.js 中的 css 类

    Knockout js 文档显示了这样的 css 绑定 div Profit Information div 我需要对其进行调整以更改鼠标单击时的 css 类 我怎样才能做到这一点 根据下面的答案 我正在使用这样的代码 CSS class
  • Breeze 和 Knockout 中的验证

    我最近使用 Knockout 和 ASP NET MVC4 将 Breeze 添加到项目中 我真的很喜欢 Breeze 它节省了大量的编码工作 我使用过 Knockout 验证 喜欢它如何验证数据输入时的属性字段文本框以及错误消息的显示方式
  • 未捕获的语法错误:实时但不在本地服务器上出现意外的令牌 B

    所以我正在制作一些ajax帖子 它似乎在本地主机上工作正常 但是当我将其发布到亚马逊上的ec2服务器时 我得到 Uncaught SyntaxError Unexpected token B 这似乎表明 JSON 解析失败 完全相同的数据库
  • 暂停 knockout.js 1.2.1 中的绑定

    淘汰赛中有暂停和恢复绑定的选项吗 版本 knockout js 1 2 1 我们需要暂停绑定的原因如下 在某些操作过程中 我们必须从服务器加载大量数据 例如 多个选择的整个数据都已更改 有些表的行是动态添加的等 现在 在当前场景中 表单与视
  • $root 和 $parent 有什么区别?

    我正在学习 KnockoutJS 但我不明白两者之间的区别 root and parent用法 请参见这个jsfiddle http jsfiddle net supercool 2gt4K 27 或下面的代码 div data Value
  • 如何将复选框绑定到值的倒数?

    我有一个情况 当我需要将一个复选框和另一个 DOM 元素的可见性绑定到我的 viewModel 的布尔属性的逆时
  • 使用 Knockout 验证插件时 Knockout ViewModel isValid 错误

    我是使用淘汰赛的新手 我正在尝试将淘汰赛验证插件与映射插件一起使用 我在视图模型对象上的 isValid 函数上遇到问题 根据文档 isValid 应该返回一个 bool 来确定视图模型上的任何可观察量是否有效 但是当我调用它时 我收到一条
  • Typescript 中此子范围的问题

    This is ALMOST和其他人一样this到目前为止 我已经读过范围界定问题 除了一个细微的差别之外 这使得提出这个问题变得有意义 imo 现在最初我的问题是范围this使用 Knockout 和 Typescript 因此给出以下内
  • 如何在knockout视图模型点击事件中访问$parent或$parents[]?

    我遇到了一种情况 我想通知祖父母或 parents 1 子视图模型中发生的点击事件 所以基本上我希望能够做到这一点 self parents 1 actionTaken 我认为这不起作用 因为绑定上下文与 viewModel 但我想听听是否
  • Edge 中的 Javascript 仅适用于打开的 devtools

    我遇到的问题是 在 MS Edge 中 我的图像映射功能只能部分工作 它由淘汰赛 FW 提供动力 在更大的图像映射上 它不会将整个图像映射注册到视图模型中 因此 图像映射的所有悬停效果和单击样式都会停止工作 然而 这只是大图像地图的问题 还
  • 如何使用 URL 将数据从 javascript 发送到 ASP.NET MVC 控制器

    我需要一些帮助 我使用 ASP NET MVC4 以及 JavaScript 和 Knockout 编写了一个小应用程序 但我无法将数据从 javascript 发送到 MVC 控制器 反之亦然 例如JS部分是这样的 JavaScript
  • 数组的淘汰赛数组

    传入的数据是这样的 1 2 3 4 5 6 有时是这样的 1 2 4 5 这是 HTML

随机推荐