我需要获取绑定到自定义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获取),而是属性名称本身.
除了解析元素的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绑定的每个元素调用.value是data-bind属性中绑定的值,name是绑定名称,addBindingCallback可用于为元素添加另一个绑定.
现在在绑定update功能的上下文中,myText您可以myTextBindedTo使用allBindings.
UPD:加入检查到的代码,因为value可以undefined在结合值的跳过的情况下:
<span data-bind="myText"></span>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
848 次 |
| 最近记录: |