Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/451.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在knockout.js中为nl2br创建自定义绑定_Javascript_Knockout.js_Custom Binding - Fatal编程技术网

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 />');