Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Вопрос по backbone.js

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
clockwerk
Отправлено: 19 Октября, 2015 - 16:44:17
Post Id



Новичок


Покинул форум
Сообщений всего: 42
Дата рег-ции: Окт. 2015  


Помог: 0 раз(а)




Если здесь есть гуру в backbone (А я в этом не сомневаюсь) подскажите пожалуйста такой вопрос:
Есть такая функция,
CODE (javascript):
скопировать код в буфер обмена
  1.  
  2. this.userList = new Users();
  3.         this.userList.fetch();
  4.         var events = _.filter(this.userList, function(login){
  5.                 return login == 'ddd';
  6.         });
  7.         console.log(this.userList);
  8.         console.log(this.userList.length);
  9.         console.log(events);
  10.  

по идее backbone должен подхватывать все методы underscore, но после выполнения этой функции в консоли я вижу (картинку прикрепил)

но после того как я получаю коллекцию this.userList делаю фетч у нее 6 моделей, но как только я применяю _.filter то моделей становиться 0, и еще что интересно, если я делаю console.log(this.userList.length); по идее должно выводить в консоли 6, но не тут то было выводит 0, даже если не использовать _.filter, не могу найти причину 2 день, прошу помощи
Прикреплено изображение (Нажмите для увеличения)
Без имени.jpg

(Отредактировано автором: 19 Октября, 2015 - 16:45:40)

 
 Top
SAD
Отправлено: 19 Октября, 2015 - 16:56:11
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2508
Дата рег-ции: Май 2009  
Откуда: Днепропетровск, Украина


Помог: 75 раз(а)




CODE (javascript):
скопировать код в буфер обмена
  1. var events = _.filter(this.userList, function(item){
  2.                 return item.login === 'ddd';
  3.         });
 
 Top
clockwerk
Отправлено: 19 Октября, 2015 - 17:03:43
Post Id



Новичок


Покинул форум
Сообщений всего: 42
Дата рег-ции: Окт. 2015  


Помог: 0 раз(а)




Вы мне еще раз помогаете, еще раз спасибо. Но это не работает, почему то вобще все underscore методы не работают, я сейчас попробовал ваш способ и еще:
CODE (javascript):
скопировать код в буфер обмена
  1.  
  2. _.each(this.userList, function(key, val){console.log(key + " - " + val);});
  3.  

Но результата - 0
Вот если
CODE (javascript):
скопировать код в буфер обмена
  1.  
  2. _.each({one : 1, two : 2, three : 3}, function(key, val){console.log(key + " - " + val)});
  3.  

То все выводит нормально, я думаю что я не правильно получаю данные, но ведь fetch работает...
В общем я вобще не знаю что делать

(Отредактировано автором: 19 Октября, 2015 - 17:04:56)

 
 Top
SAD
Отправлено: 19 Октября, 2015 - 17:04:35
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2508
Дата рег-ции: Май 2009  
Откуда: Днепропетровск, Украина


Помог: 75 раз(а)




может, потому что запрос ассинхронный?

CODE (javascript):
скопировать код в буфер обмена
  1. var events;
  2.  
  3. this.userList.fetch({
  4.     success: function () {
  5.         events = _.filter(this.userList, function(item){
  6.                 return item.login === 'ddd';
  7.         });
  8.  
  9. console.log(events)
  10.     }
  11. });

(Отредактировано автором: 19 Октября, 2015 - 17:06:03)

 
 Top
clockwerk
Отправлено: 19 Октября, 2015 - 17:05:40
Post Id



Новичок


Покинул форум
Сообщений всего: 42
Дата рег-ции: Окт. 2015  


Помог: 0 раз(а)




Щас попробую в callback fetch`a спасибо за подсказку
(Добавление)
Чуть чуть подправил
CODE (javascript):
скопировать код в буфер обмена
  1.  
  2. var events;
  3. var self = this
  4.         this.userList.fetch({
  5.                 success:function() {
  6.                         var events = _.filter(self.userList, function(login){
  7.                               return login === 'ddd';
  8.                         });
  9.                 console.log(events);
  10.                
  11.                 }
  12.         });
  13.  

Но все равно результат тот же(

Но console.log(self.userList.length); в callback выводит 6, т.е. правильно, значит уже есть какая то динамика

(Отредактировано автором: 19 Октября, 2015 - 17:18:08)

 
 Top
SAD
Отправлено: 19 Октября, 2015 - 18:56:25
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2508
Дата рег-ции: Май 2009  
Откуда: Днепропетровск, Украина


Помог: 75 раз(а)




Вы меня извините, конечно, но я написал

CODE (javascript):
скопировать код в буфер обмена
  1. events = _.filter(this.userList, function(item){
  2.                 return item.login === 'ddd';
  3.         });


item!!!!

или

CODE (javascript):
скопировать код в буфер обмена
  1. events = _.filter(this.userList, function(item){
  2.                 return item.get('login') === 'ddd';
  3.         });

(Отредактировано автором: 19 Октября, 2015 - 18:59:19)

 
 Top
clockwerk
Отправлено: 20 Октября, 2015 - 09:39:46
Post Id



Новичок


Покинул форум
Сообщений всего: 42
Дата рег-ции: Окт. 2015  


Помог: 0 раз(а)




Цитата:
Вы меня извините, конечно, но я написал item!!!!


Сори, не увидел сразу, но тогда ругается на
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. Uncaught TypeError: Cannot read property 'login' of undefined //В первом случае
  3.  
  4. Uncaught TypeError: Cannot read property 'get' of undefined //Во втором случае
  5.  


Нашел решение не используя методы underscore, вот так:
CODE (javascript):
скопировать код в буфер обмена
  1.  
  2. var events = self.userList.where({login: 'ddd'});
  3.  

Правда не знаю насколько оно правильное
 
 Top
SAD
Отправлено: 20 Октября, 2015 - 10:45:10
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2508
Дата рег-ции: Май 2009  
Откуда: Днепропетровск, Украина


Помог: 75 раз(а)




where метод underscore тоже)

в Вашем случае правильней findWhere, так как он возвращает только один найденный элемент. Хотя, я сомневаюсь, что в списке логинов будут неуникальные значения. Но все же
(Добавление)
filter неправильно использовался в случаях выше

ради интереса попробуйте так

CODE (javascript):
скопировать код в буфер обмена
  1.  _.filter(this.userList.models, function(model){
  2.                 return model.get('login') === 'ddd';
  3.         });
  4.  


и

CODE (javascript):
скопировать код в буфер обмена
  1. this.userList.filter(function(model){
  2.                 return model.get('login') === 'ddd';
  3.         });


но, в любом случае findWhere оставьте в качестве решения
 
 Top
clockwerk
Отправлено: 20 Октября, 2015 - 12:29:41
Post Id



Новичок


Покинул форум
Сообщений всего: 42
Дата рег-ции: Окт. 2015  


Помог: 0 раз(а)




Спасибо вам огромное за помощь!! Да действительно использую findWhere.

P.S. Оба ваши решения с filter работают как положено.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« JavaScript & VBScript »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB