Sim*_*mon 6 javascript data-binding knockout.js
让我们说我有一个限制范围
<span data-bind="MyBinding: Name"></span>
Run Code Online (Sandbox Code Playgroud)
我有一个自定义绑定
ko.bindingHandlers.MyBinding = {
init: function (element, valueAccessor, allBindings, viewModel, context) {
// I want to get the string "Name" here. NOT the value of Name.
},
};
Run Code Online (Sandbox Code Playgroud)
如何在处理程序中获取带有绑定表达式值的字符串?即如何获得"名称"而不是"名称的价值".
我还需要表达式,所以传递字符串"Name"是不可行的.
<span data-bind="MyBinding: 'Name'"></span>
Run Code Online (Sandbox Code Playgroud)
事实上,Knockout确实有一个内置的方法来做到这一点。您确实需要稍微调整一下自定义绑定(即,它变成一个对象而不是字符串值)。Knockout 允许您与init和update属性一起指定preprocess属性。例如,假设我们有以下 viewModel:
var app = { data: ko.observable('Hello World') };
Run Code Online (Sandbox Code Playgroud)
一个简单的绑定会将传递给它的字符串完全转换为小写,并输出绑定的名称和值(视图中传递的属性显然是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 + '\'}';
}
};
Run Code Online (Sandbox Code Playgroud)
它就像对传递value给它的属性进行字符串化并将绑定的值转换为具有 2 个键的对象(此处为名称和值)一样简单。看一看。有关详细信息,请参阅绑定预处理。