2014-01-25 2 views
0

Я пытаюсь это попытаться отфильтровать определенные данные.данные фильтра backbonejs при передаче параметра

В меню У меня есть список, который я бы хотел, когда я нажимаю один, я получаю только информацию об этом.

HourView= Backbone.View.extend({  


    initialize: function(){   
     this.template = _.template($("#HourView").html()); 
    }, 
    render: function() { 
     var col = new HourCollection();  

     $.ajax({ //zeptojs 
     async: true 
     }); 
     col.fetch({ success: function() { 

     }}); 

     //col.fetch({reset: true}); 
     $.ajax({ //zeptojs 
     async: false 
     });   
     col.where({"name": "Gamarra"}); 


     this.$el.html(this.template({ horarios: col.toJSON() }));   
     return this; 
    } 
}); 

[ { "Название": "Гамарра", "VES": [ "00:00" ], "ГРАУ": [ "1:00" ] } , { "название": "Grau", "VES": [ "8:00" ], "ГРАУ": [ "7:00" ] } ]

Я пытаюсь это

initialize: function(){ 
     this.collection = new HourCollection();   
     this.collection.fetch({reset: true}); 
     this.collection.fetch({success: function(collection) { 
      collection = collection.where({"name": "Gamarra"}); 
      console.log(JSON.stringify(collection))   
     }});    

     this.collection.on("sync", this.render, this); 

     this.template = _.template($("#HourView").html() );    
    }, 
    render: function() { 
     this.$el.html(this.template({ hs: this.collection.toJSON() }));   
     return this; 
    } 
+0

когда я использую «где», потому что мне нужно определенную часть JSON, а затем показать в шаблоне col.fetch ({успех: функция() { \t \t \t col.where ({"nombre": "Gamarra"}); \t \t}}); но он не работает ... хорошо – Osgux

+0

Есть ли copy'n'paste ошибки в этом коде? Поддерживает ли Zepto 'async: true'? Почему вы не используете события на 'col' для запуска рендеринга? Обычно вы должны создавать экземпляр в 'initialize',' col.fetch ({reset: true}) 'и прослушивать событие' 'reset'' для запуска 'render' (более или менее). –

+0

да, но мне нужна эта часть "[{" nombre ":" Gamarra "," VES ": [" 00:00 "]," GRAU ": [" 01:00 "]}]" – Osgux

ответ

1

Метод where возвращает массив (не коллекции) с моделями, так что вы можете использовать подчеркивание, чтобы вызвать toJSON метод на каждой модели, так она будет выглядеть как toJSON но фильтруют.

this.$el.html(this.template({ hs: _.invoke(this.collection.where({"name": "Gamarra"}), 'toJSON') })); 

Второй способ просто использовать фильтр на JSON

this.$el.html(this.template({ hs: _.where(this.collection.toJSON(), {name: "Gamarra"}) })); 

Третий способ заключается в использовании chain метод на коллекции (кстати он не работает на ваших данных :(и я не знаю, почему он возвращает пустой массив)

this.collection.chain().where({ name: "Gamarra" }).value() 
+0

Я пробую этот синтаксический анализ : функция (ответ) { \t \t \t console.log (JSON.stringify (ответ [this.value])) \t \t \t \t \t \t возврата ответа [this.value]; \t \t} var часCollection = новый HourCollection (value); он работает, но просмотр я не могу обновить элементы или данные .. – Osgux

+0

это работает спасибо :) – Osgux

Смежные вопросы