javascript - 如何在 Knockout JS 中的 BindingHandler 中获取绑定(bind)表达式

标签 javascript data-binding knockout.js

假设我有一个跨度

<span data-bind="MyBinding: Name"></span>

我有一个自定义绑定(bind)

ko.bindingHandlers.MyBinding = {
   init: function (element, valueAccessor, allBindings, viewModel, context) {
        // I want to get the string "Name" here. NOT the value of Name.
   },
};

如何在处理程序中获取包含绑定(bind)表达式值的字符串?即我如何获得“名称”而不是“名称的值”。

我还需要表达式,所以传递字符串“Name”是不可行的。

<span data-bind="MyBinding: 'Name'"></span>

最佳答案

实际上,Knockout 确实有一个内置的方法来做到这一点。您确实需要稍微调整一下自定义绑定(bind)(即,它变成一个对象而不是字符串值)。 Knockout 允许您与 initupdate 属性一起指定 preprocess 属性。例如,假设我们有以下 viewModel:

var app = { data: ko.observable('Hello World') };

还有一个简单的绑定(bind),它将传递给它的字符串完全转换为小写,并输出绑定(bind)的名称和值( View 中传递的属性显然是 data):

ko.bindingHandlers.lower = {
  update: function(elem, value) {
    var obj = ko.unwrap(value());
    elem.textContent = 'Name: ' + ko.unwrap(obj.name) + 
      ' - Value: ' + ko.unwrap(obj.data).toLowerCase();
  },
  preprocess: function(value, bindingName) {
    return '{data:' + value + ', name:\'' + bindingName + '\'}';
  }
};

它就像将传递给它的 value 属性字符串化并将绑定(bind)的值转换为具有 2 个键(此处为名称和值)的对象一样简单。 Have a look .参见 Binding preprocessing了解更多信息。

关于javascript - 如何在 Knockout JS 中的 BindingHandler 中获取绑定(bind)表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14352691/

相关文章:

c# - 更改 ListBox 的选择会更改其他 ListBox 的选择。这是怎么回事?

javascript - Knockout.js 模板 - "skip"循环?

jquery - 当 ko 验证消息很长时如何对齐

javascript - KnockoutJS foreach 绑定(bind) : cannot apply bindings multiple times to same element

javascript - 获取新值输入 .innerHTML

javascript - 用图像替换 SVG

javascript - Ember.js 2. 使用嵌套模板会消耗更多 RAM 吗?

javascript - 事件在开幕前进行选择。 (点击速度不够快)

wpf - WPF/Silverlight 依赖属性延迟 "rendering"?

c# - bindingsource 上的 CancelEdit 不会取消对象的所有已编辑字段