1

KnockoutJS は初めてです。要素のテキストを変更する (またはテキスト要素から更新する) ために使用されるオブザーバブルを定義する方法は知っていますが、モデル内のデータを実際には読み取り/書き込みアクセスを持つ正規表現にしたいと考えています。likeを使って設定したいtextarea

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

そして、次を使用してページに表示します。

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

これで初期化が機能します。

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

そして、 と の両方textareaspan更新されます (ネイティブの正規表現変数には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次のように、計算されたオブザーバブルに変換する必要があります。

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

ただし、テキストエリアで編集可能な正規表現文字列を追跡する必要があります(regex_string私のコードでは観察可能です)。

見てみましょう: http://jsbin.com/ofehuj/2/edit

于 2013-03-29T12:42:33.440 に答える