1

我是 KnockoutJS 的新手。我知道如何定义将用于更改元素文本(或从文本元素更新)的可观察对象,但是,我希望模型中的数据实际上是具有读/写访问权限的正则表达式。我想使用textarea类似设置它:

<textarea data-bind="value: regex"></textarea>

并使用以下命令在页面上显示:

<span data-bind="text: regex"></span>

现在初始化工作:

//inside the model
this.regex = ko.observable( /,/g );

并且两者都textarea得到span更新(因为本机正则表达式变量具有一个toString()可以很好地显示正则表达式的字符串表示的函数)。但是当我更改时regex不会更新。似乎设置可观察对象失败了。textareaspan

这是可以理解的,因为valuefromtextarea只是一个文本,为了将其转换为实际的正则表达式,需要一些代码。我有代码。function str2regex()让我们用类似这样的主体来调用它:

//this is pseudo code and doesn't neccesarily work
function str2regex( str )
  var r = str.match( "^\/(.+?)\/([mig])*$" );
  if ( r ) {
    if ( r[2] === null ) {
      return new RegExp( r[1] );
    } else {
      return new RegExp( r[1], r[2] );
    }
  }
  return null;
}

如何使用来自的文本在我的模型中设置类型正则表达式的值textarea

4

1 回答 1

2

您应该str2regex像这样将您的转换为计算出的 observable:

// str2regex transformed to computed observable
self.regex = ko.computed(function(){
    var m = self.regex_string().match(/^\/(.+)\/([mig])*$/);
    return m ? new RegExp(m[1], m[2]) : null;
});

但是您仍然应该跟踪您在 textarea 中可编辑的正则表达式字符串(regex_string在我的代码中可观察到)。

看看:http: //jsbin.com/ofehuj/2/edit

于 2013-03-29T12:42:33.440 回答