因此最新的Knockout附带了一个新的binding pre-processing feature。它表示,与init
和update
方法一起,绑定可以采用preprocess
方法,该方法需要value
,name
和addBinding
打回来。这一切都很好而且整洁,但是
value
和name
?他们只是用逗号分开吗?value
的值吗?修改
我们知道绑定字符串可以包含多个绑定表达式。那么当一个表达式结束而另一个表达式开始时,KO如何知道?我们可以假设绑定表达式应该是一个由逗号分隔的有效键值对,并且右侧有一个有效的javascript表达式,但是文档显示的示例#1并非如此。好吧,如果它是什么不同于它是什么?
答案 0 :(得分:2)
您获得 value
和name
字符串,其中包含您在视图中的绑定中所写的文本,因此不涉及解析。
来自文档:
value
:与Knockout之前的绑定值相关联的语法 尝试解析(例如, yourBinding:1 + 1 ,相关联 值“1 + 1”为字符串)。
name
:绑定的名称(例如, yourBinding:1 + 1 ,名称 将“yourBinding”作为字符串)。
您可以轻松地创建一个简单的示例:
ko.bindingHandlers.myFancyBinding = {
preprocess: function (value, name, addBindingCallback) {
console.log(value);
console.log(name);
return value;
}
}
如果你这样使用它:
<div data-bind="myFancyBinding: 1+2+'some crazy expresssion'"></div>
输出将是:
1+2+'some crazy expresssion'
myFancyBinding
演示JSFiddle。
答案 1 :(得分:1)
当绑定字符串包含多个绑定时,绑定用逗号分隔。因此,a, b
被解释为两个绑定a
和b
。在每个绑定中,名称和值由冒号分隔。因此,a: b
是名为a
和值b
的单个绑定。如果不存在冒号,则绑定的值为undefined
。
名称可以指定为字符串,在这种情况下,它可以包含除引号之外的任何字符:'some crazy binding :-)': true
。如果没有引号,它可能包含除以下,:/'"()[]{}
之外的任何字符。
值可以是任何有效的JavaScript表达式,只要没有顶级逗号即可。只要引号和左括号,括号和大括号匹配且没有顶级逗号,它也可以是任何值。例如,如果您的绑定为a: happy :-)
,则提供给preprocess
的值将为happy:-)
(对于运算符字符,空格不重要)。但是,如果它不是有效的JavaScript,则必须通过preprocess
函数将其转换为有效的JavaScript。