[英]Binding a regular expression as an observable in knockoutjs
我是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()
函數,可以很好地顯示正則表達式的字符串表示形式)。 但是,當我在textarea
更改regex
, span
不會更新。 設置可觀察對象似乎失敗了。
這是可以理解的,因為textarea
的value
只是一個文本,為了將其轉換為實際的正則表達式,需要一些代碼。 我有代碼。 我們將其稱為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
轉換為可計算的可觀察值:
// 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
)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.