簡體   English   中英

將常規表達式綁定為可敲除

[英]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 );

而且textareaspan都會更新(因為本機正則表達式變量具有toString()函數,可以很好地顯示正則表達式的字符串表示形式)。 但是,當我在textarea更改regexspan不會更新。 設置可觀察對象似乎失敗了。

這是可以理解的,因為textareavalue只是一個文本,為了將其轉換為實際的正則表達式,需要一些代碼。 我有代碼。 我們將其稱為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 )。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM