4

1.0より前のemberに単純なArrayControllerがあり、フィルターが特定のプロパティに完全に一致するものを見つけた場合にリストを切り詰めることができることがわかりましたが、見つけられないように見えるのは、フィルターを使用して「like」クエリを実行する方法です。

ユーザーで配列を検索すると、以下が機能します...

filtered = ['id', 'username'].map(function(property) {
  return self.get('content').filterProperty(property, filter);
});

...そして何人かのユーザーは同じユーザー名を持っています。たとえば、=>「smith」で検索/フィルタリングすると、「username」プロパティは「smith」と完全に一致するため、両方のレコードが返されます。

このマップ関数を変更して、同様のスタイルのクエリで機能するようにするには、「sm」という単語を入力しても、これらのレコードの両方が検出されるようにするにはどうすればよいですか。

これが、上記のアクションで示したフィルターを示すjsfiddleですhttp://jsfiddle.net/Rf3h8/

前もって感謝します

4

1 に答える 1

11

オブジェクトを使用しRegExpて、一致するデータをテストできます。独自のフィルターロジックを作成しているため、このfilter関数を使用する必要があります。この機能を実現するためにフィドルを更新しました:http://jsfiddle.net/Rf3h8/1/

あなたのフィドルにはたくさんのコードが含まれており、他の人がフォローするのは難しいかもしれません。RegExpこれは、配列をフィルタリングするために使用する非常に簡単な例です。

var names = ['ryan', 'toran', 'steve', 'test'];
var regex = new RegExp('ry');

var filtered = names.filter(function(person) {
  return regex.test(person);
});

filtered // => ['ryan']

実際、これをリファクタリングして次のようにすることもできます

var filtered = names.filter(regex.test, regex);
于 2012-09-23T23:04:02.653 に答える