2

私は Ember.JS を使い始めていますが、いい質問ができたと思います。左側にアイテムの作業リストがあり、右側に検索フィールドがあります。したがって、KeyUp イベントでは、テキストフィールドの値をモデルに送信して、次のように一致を見つけます。

this.controllerFor('productImages').set('model', App.ProductImage.find({ean_codes: value}));

私の質問は、ID 1234 を持っている場合、'1' だけを検索してもそれを見つけることができるように、ある種の RegEx を使用して一致を見つけることは可能でしょうか?

4

2 に答える 2

4

クエリに関するEmber Dataのドキュメントによると:

find() にハッシュを渡すことで、サーバーにクエリを実行できます。

ハッシュの内容は Ember Data に対して不透明です。それを解釈してレコードのリストを返すのはサーバー次第です。

クライアント側のフィルタリングが必要な場合は、 のfilter()方法を使用できますEmber.Array。この例では、元の配列の内容のサブセットを含む計算されたプロパティを表示します。この計算された配列は、ボックスに入力されたものと一致するアイテムのみを表示します。

JSBin の例

Javascript:

App = Ember.Application.create({});

App.IndexRoute = Ember.Route.extend({
  setupController: function(controller) {
    controller.set('content', [
      Ember.Object.create({name: 'Joe'}), 
      Ember.Object.create({name: 'Frank'}), 
      Ember.Object.create({name: 'John'}),
      Ember.Object.create({name: 'Billy'}),
      Ember.Object.create({name: 'John'}),
      Ember.Object.create({name: 'Johnny'})
    ]);
  }
});

App.IndexController = Ember.ArrayController.extend({
  content: [],
  filter: "",
  filteredContent: function() {
    var filter = this.get('filter');

    return this.get('content').filter(function(item, index, enumerable){
      return item.get('name').toLowerCase().match(filter.toLowerCase());
    });
  }.property('filter', 'content.@each')

});

ハンドルバー:

<script type="text/x-handlebars" data-template-name="index">
  <h2>Index Content:</h2>
  <span>Filter: </span>{{view Ember.TextField valueBinding=filter}}
  <ul>
  {{#each item in filteredContent}}
      <li>{{item.name}}</li>
  {{/each}}
   </ul>
</script>
于 2013-03-14T20:44:08.590 に答える
2

Ember-Data のフィルター処理されたレコード配列は、うまく適合する可能性があります。store.filter代わりに使用することでstore.find、クライアント側でフィルタリングされたライブ レコード配列を返すことができます。

すでにロードされているレコードをフィルタリングするには、次を使用します。

this.controllerFor('productImages').set('model', App.ProductImage.filter(function(hash) {
  if (hash.get('id').match(/1/)) { return true; }
});

クエリも開始する必要がある場合は、フィルタ メソッドの最初のパラメータとしてクエリ パラメータ (または空のハッシュ) を追加します。

this.controllerFor('productImages').set('model', App.ProductImage.filter({}, function(hash) {
  if (hash.get('id').match(/1/)) { return true; }
});

これに関するドキュメントやガイドはまだないため、学ぶのに最適な場所は、ember-data テストを使用することです。以下は、開始するのに適した場所です。

于 2013-03-14T22:23:37.713 に答える