我没有正式的计算机科学教育,所以也许我为什么不理解它。我在wikepedia上读到,令牌化意味着将文本串分解为称为标记的单词或短语。您可以使用这些令牌进行输入。所以我假设这是血腥建议在做Bloodhound.tokenizers.whitespace(d.num)
时所做的事情。
1)请告诉我为什么说白色空间。
2)上述意思是它通过num属性分割对象。它将num属性的所有值放入一个数组中,并将其存储在一个名为datumTokenizer
该代码的完整部分:
datumTokenizer: function(d) {
return Bloodhound.tokenizers.whitespace(d.num);
},
查看this页面中的示例。它使用一个对象。
local: [{ num: 'one' }, { num: 'two' }, { num: 'three' }],
这是一个obj。 3)我们不应该使用下面有obj
Bloodhound.tokenizers.obj.whitespace(d.num)
。注意obj。
4)将Bloodhound.tokenizers.whitespace(d.num)
将示例obj拆分为[“one”,“two”,“three”]
根据这个:answer我认为答案是肯定的,他将名单称为“索引”
当我们执行queryTokenizer: Bloodhound.tokenizers.whitespace,
时,文档会说“queryTokenizer - 一个带有签名(查询)的函数,它将查询转换为字符串标记数组”
5)在这个例子中我们如何做到这一点? 哦,只是在想。我们是否正在使用那个具有由空格分隔的单词串的datumTokenizer数组用于查询?为什么我们需要这样做呢。我们已经有了阵列。
var mySource = new Bloodhound({
datumTokenizer: function(d) {
return Bloodhound.tokenizers.whitespace(d.num);
},
//doesn't whitespace need to be called? "A function with the signature (query)"[from docs]
queryTokenizer: Bloodhound.tokenizers.whitespace,
local: [{ num: 'one' }, { num: 'two' }, { num: 'three' }],
prefetch: '/prefetch',
remote: '/remote?q=%QUERY'
});
mySource.initialize();
$('.typeahead').typeahead(null, {
displayKey: 'num',
source: mySource.ttAdapter()
});
编辑:为什么说whitespace
?从哪里开始的空白?
var tokenizers = function() {
"use strict";
return {
nonword: nonword,
whitespace: whitespace,
obj: {
nonword: getObjTokenizer(nonword),
whitespace: getObjTokenizer(whitespace)
}
};
function whitespace(str) {
str = _.toStr(str);
return str ? str.split(/\s+/) : [];
}
所以我看到如果它是一个对象,它会把它变成一个字符串,然后用空格将它分成一个数组。那么datumTokenizer:
到底有多精确?它如何通过对象迭代(获取d.num)?你看到一个forloop还是forEach()? 。抱歉有太多问题,但这是一个主题。
编辑3: 我刚刚在文档中看到了这个
datumTokenizer - 具有签名(datum)的函数,用于将数据转换为字符串标记数组。必需的。
因此,在这种情况下,“datum”是属于Bloodhound实例中的属性local
的对象?
我想我到了那儿。