我有一个自定义绑定,用于截断可观察数组中的描述。我只是想知道更改返回绑定的文本的最佳方法。
ko.bindingHandlers.summarize = {
init: function(element, valueAccessor, allBindingsAccessor, context) {
var pattern = new RegExp(/^[^.]+/);
var summarized = pattern.exec(context.description());
//How do I set the text to the summarized value?
}
}
广泛的描述在页面的其他地方使用。此截断版本用于侧栏。打开关于更好的方法的建议,但这对我来说似乎是最好的方式。
viewModel是通过映射插件从JSON文件生成的,或者我只是直接在viewmodel中添加截断版本。
感谢你看一看。
答案 0 :(得分:3)
这就是我所做的。一旦我查看淘汰图书馆的来源,这很简单。我强烈建议在库代码中进行挖掘。这对于学习是非常宝贵的。
ko.bindingHandlers.summarize = {
init: function(element, valueAccessor, allBindingsAccessor, context) {
var pattern = new RegExp(/^[^.]+/);
var summarized = pattern.exec(context.description());
typeof element.innerText == "string" ? element.innerText = summarized
: element.textContent = summarized;
}
}
要在模板中使用它,您只需:
<p data-bind='summarize: description'></p>
描述将是可观察的。
答案 1 :(得分:0)
在您的示例中,您将自定义绑定与绑定语句data-bind='summarize: description'
中的描述相关联,因此您可以使用valueAccessor
参数来提高灵活性。
我更进一步使用ko.unwrap
函数,因此您的自定义绑定也可以处理不可观察的值:
ko.bindingHandlers.summarize = {
init: function(element, valueAccessor, allBindingsAccessor, context) {
var pattern = new RegExp(/^[^.]+/);
var summarized = pattern.exec(ko.unwrap( valueAccessor() ) );
typeof element.innerText == "string" ? element.innerText = summarized
: element.textContent = summarized;
}
}