2015-12-22 4 views
0

Этот код для поиска в hasMany children работает как шарм. Но я хочу искать в текущей модели (например, отфильтрованной название магазина: «storeOne»), то есть причина, потому что я хочу искать в текущей модели, а не запрос к this.store и не запрашивать УПУ ...Поиск в текущей модели

 var _self = this; 
     this.store.findAll('store').then(function(stores){ 

      // search 
      var promises = stores.map(function(store){ 

       return Ember.RSVP.hash({ 
        store: store, 
        customers: store.get('customers').then(function(customers){ 
         return customers.filter(function(customer){ 
          var regExp = new RegExp(search, 'i'); 

          var retVal = false; 

          if (customer.get('name') !== undefined) retVal = retVal || customer.get('name').match(regExp); 
          if (customer.get('surname') !== undefined) retVal = retVal || customer.get('surname').match(regExp); 
          if (customer.get('age') !== undefined) retVal = retVal || customer.get('age').match(regExp); 

          return retVal; 
         }); 
        }) 
       }); 

      }); 

      Ember.RSVP.all(promises).then(function(filteredData){ 
       _self.set('content', filteredData); 
      }); 
     }); 
  • Вопрос: Как я могу фильтровать поисковые клиенты в текущей модели без использования findAll или запроса API?

UPDATE:

  • Фикс мой вопрос, фильтровать текущие элементы модели без запроса новые данные из this.store или сервера API.

    filtered: Ember.computed.filter('[email protected]', function(store){ var search = this.get('searchString'); 
    
    if (search !== undefined) { 
    
        guild.get('customers').then(function(customers) { 
    
         var regExp = new RegExp(search, 'i'); 
    
         customers.map(function(customer){ 
    
          var retVal = false; 
    
          var name = customer.get('name'); 
          var surname = customer.get('surname'); 
          var age = customer.get('age'); 
    
    
          if (name !== undefined) { 
           retVal = retVal || name.match(regExp) !== null; 
          } 
          if (nick !== undefined) { 
           retVal = retVal || surname.match(regExp) !== null; 
          } 
          if (age !== undefined) { 
           retVal = retVal || age.match(regExp) !== null; 
          } 
    
          customer.set('show', retVal); 
         }); 
    
        }); 
    } else { 
        guild.get('customers').then(function(customers) { 
         customers.map(function(customer){ 
          customer.set('show', true); 
         }); 
        }); 
    } 
    
    return store; }).property('[email protected]', 'searchString') 
    

ответ

1

Если я понимаю ваш вопрос вы не хотите, чтобы сделать запрос на бэкенд для извлечения ребенка модели?

Если это правильно, для вас должно быть хорошо. это выдержка из документа Ember.

Используйте store.peekRecord() для извлечения записи по ее типу и идентификатору без запроса сети. Это вернет запись только в том случае, если она уже присутствует в магазине.

+0

Извините, но вы пропустите .. Все дети в магазине. Я хочу, чтобы дочерний элемент модели фильтра, а не из магазина, api ... – iTux