Javascript 在knockout.js中为nl2br创建自定义绑定
我正在尝试编写一个自定义绑定,在“Javascript 在knockout.js中为nl2br创建自定义绑定,javascript,knockout.js,custom-binding,Javascript,Knockout.js,Custom Binding,我正在尝试编写一个自定义绑定,在“”元素中用“”替换“/n” 我或多或少理解这个概念,但我正在努力让它继续下去。谁能告诉我哪里出了问题。我真的不想使用计算的可观测值,因为我想使用“/n”而不是“”来保留实际值 ko.bindingHandlers.nl2br={ init:function(元素、valueAccessor、allBindingsAccessor、viewModel、bindingContext){ var字段=valueAccessor(); 字段。替换(/\n/g,“”);
”元素中用“
”替换“/n
”
我或多或少理解这个概念,但我正在努力让它继续下去。谁能告诉我哪里出了问题。我真的不想使用计算的可观测值,因为我想使用“/n
”而不是“
”来保留实际值
ko.bindingHandlers.nl2br={
init:function(元素、valueAccessor、allBindingsAccessor、viewModel、bindingContext){
var字段=valueAccessor();
字段。替换(/\n/g,“
”);
$(元素).val(字段)
},
更新:函数(元素、valueAccessor、allBindingsAccessor、viewModel、bindingContext){
var字段=valueAccessor();
字段。替换(/\n/g,“
”);
$(元素).val(字段)
}
};
TL;Answer博士
否则,新字符串将被丢弃
除此之外,我不建议直接设置元素值。依靠现有的处理程序(可能在各种浏览器中经过良好测试)来完成繁重的工作。见关于这一主题的报告(特别是第3项)
如果要为
呈现换行符,可以使用,它将按字面意思呈现“
”或(如果您信任输入!)。后者如下所示:
ko.bindingHandlers.nl2br={
更新:函数(元素、valueAccessor、allBindingsAccessor、viewModel、bindingContext){
var field=ko.utils.unwrapobbservable(valueAccessor());
field=field.replace(/\n/g,“
”);
update(元素,函数(){return field;});
}
};
applyBindings({description:ko.observable(“This\nspata!”)})代码>
p,pre{背景色:#dde;边距:4px0;}
p中的文本版本:
文本版本前:
NL2BR版本在p:
忘记提到我的值是一个可观察值,需要将自身作为函数调用以返回值。谢谢你的帮助@在这种情况下,最好使用unwrapObservable
,请参阅。我的答案在这方面有所欠缺,因此我对其进行了相应的更新。对于那些只需要在文本中看到\n字符的新行的人:这可以通过一个css属性实现-请参见以下问题:
ko.bindingHandlers.nl2br = {
init: function(element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {
var field = valueAccessor();
field.replace(/\n/g, '<br />');
$(element).val(field)
},
update: function(element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {
var field = valueAccessor();
field.replace(/\n/g, '<br />');
$(element).val(field)
}
};
ko.bindingHandlers.nl2br = {
update: function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {
var field = ko.utils.unwrapObservable(valueAccessor());
field = field.replace(/\n/g, '<br />');
ko.bindingHandlers.html.update(element, function() { return field; });
}
};
field = field.replace(/\n/g, '<br />');