在绑定中使用preprocessing时,我可以很容易地获取绑定的值'与Knockout尝试解析它之前绑定值相关的语法'
ko.bindingHandlers.uniqueName.preprocess = function(val) {
return val || 'true';
}
如何在' init'中获取此值?或者'更新'我的自定义绑定部分?
ko.bindingHandlers.myBinding = {
preprocess: function(val) {
//Here I can read the text value of my binding, i.e., 'myObservale' as text
console.log(val);
return val;
},
init: function(element, valueAccessor, allBindings, viewModel, bindingContext) {
//How can I read the text value of my binding here? i.e., 'myObservale' as text?
ko.applyBindingsToNode(element, {
text: valueAccessor()
});
},
update: function(element, valueAccessor, allBindings, viewModel, bindingContext) {}
};
var vm = {
myObservable: ko.observable('This is the observable value')
};
ko.applyBindings(vm);

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script>
<div data-bind="myBinding: myObservable"></div>
&#13;
答案 0 :(得分:2)
我不确定你要在这里完成什么,但如果你想在你的绑定中使用字符串"myObservable"
,你应该在绑定中传入一个字符串。
<div data-bind="myBinding: 'myObservable'"></div>
如果要将传递给绑定的表达式转换为字符串,则必须将引号添加到表达式中。只需确保您的绑定使用简单的变量名称,而不是复杂的表达式。
<div data-bind="myBinding: myObservable"></div>
ko.bindingHandlers.myBinding = {
preprocess: function (value) {
return '"' + value + '"'; // changes the expression to "myObservable"
},
init: function (element, valueAccessor) {
var value = valueAccessor(); // string: 'myObservable'
// ...
}
};
由于您只需要在另一个绑定中使用表达式的名称,因此最好的方法是使用preprocess()
函数根据表达式添加其他绑定,而不是像我们一样转换该表达式这里。
为此,您需要使用preprocess()
函数的第三个参数来公开可用于添加其他绑定的函数。有了它,您可以使用文本表达式来派生属性绑定。
preprocess: function (value, name, addBinding) {
addBinding('attr', '{ "id": "myprefix_' + value + '" }');
return value; // use the original expression in your binding
},
您的init()
和update()
函数只能使用该值而不用担心名称。
init: function (element, valueAccessor) {
var value = valueAccessor(); // the value of myObservable
// ...
}