我是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
中的textarea
时,span
不会更新。设置可观察对象似乎失败了。这是可以理解的,因为
value
中的textarea
只是一个文本,为了将其转换为实际的正则表达式,需要一些代码。我有代码。我们称其为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
的文本在模型中设置正则表达式类型的值? 最佳答案
您应该像这样将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
关于javascript - 将常规表达式绑定(bind)为 knockout ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15701232/