访问Knockout valueAccessor属性名称

Joh*_*ore 4 knockout.js

我需要获取绑定到自定义knockout绑定的knockout viewmodel属性的实际名称.考虑以下自定义绑定设置......

HTML

<input type="text" data-bind="myInput: Name" />
Run Code Online (Sandbox Code Playgroud)

使用Javascript

ko.bindingHandlers.myInput = {
    init: function(element, valueAccessor, allBindingsAccessor, data, context) {
    },
    update: function(element, valueAccessor, allBindingsAccessor, data, context) {
    }
};

var viewModel = {
    Name: ko.observable('Knockout')
};

ko.applyBindings(viewModel);
Run Code Online (Sandbox Code Playgroud)

在自定义绑定处理程序的更新函数的上下文中,如何知道属性Name是要访问的属性?我不是在寻找Name的值(我可以通过valueAccessor获取),而是属性名称本身.

Val*_*k26 8

除了解析元素的data-bind属性或手动设置属性名称作为绑定参数外,还有一些针对您的问题的奇特解决方案.使用预处理:

ko.bindingHandlers.myText.preprocess = function(value, name, addBindingCallback) {
  if (typeof(value) !== 'undefined') {
    addBindingCallback('myTextBindedTo', "'" + value.replace(/['\\]/g, "\\$&") + "'");
  }
  return value;
}
Run Code Online (Sandbox Code Playgroud)

ko.bindingHandlers.myText.preprocess为具有myText绑定的每个元素调用.valuedata-bind属性中绑定的值,name是绑定名称,addBindingCallback可用于为元素添加另一个绑定.

现在在绑定update功能的上下文中,myText您可以myTextBindedTo使用allBindings.

小提琴

文档

UPD:加入检查到的代码,因为value可以undefined在结合值的跳过的情况下:

<span data-bind="myText"></span>
Run Code Online (Sandbox Code Playgroud)