2013-02-21 2 views
1

Я довольно новичок в магистрали, и я пытаюсь создать простое приложение. Это то, что я до сих порМагистральная длина возврата 0

var Election = Backbone.Model.extend(); 

var Elections = Backbone.Collection.extend({ 
    model: Election, 
    url: '/assets/data.json', 

    initialize: function() { 
     console.log('init col'); 
     this.render(); 
     return this; 
    }, 

    render: function() { 
     console.log('rendering the collection'); 
     return this; 
    }, 

// return this 

}); 

    var router = Backbone.Router.extend({ 
    routes: { 
     '': 'root' 
    }, 

    root: function(){ 
     var collection = new Elections(); 
     collection.fetch(); 
     console.log(collection.length); //returns 0 
    } 
}); 
var r = new router(); 

Backbone.history.start(); 

Бревно это

> init col 
> rendering the collection 
> 0 

Но когда я создаю новую коллекцию вручную в консоли, он показывает правильную длину и все, я полагаю, что для некоторых причина, по которой звонок маршрутизатора происходит слишком рано, но не уверен. Это образец data.json

[ 
    { 
     "year": 1868, 
     ... 
    }, 
    { 
     "year": 1872, 
     ... 
    }, 

ответ

3

fetch выполняет асинхронный HTTP (Ajax) запрос, так что вы должны пройти fetch успех обратного вызова:

collection.fetch({ 
    success: function(){ 
     console.log(collection.length); 
    } 
}); 
0

расширения на ответ КР немного,

, лучшим подходом было бы звонить fetch, а затем с использованием listenTo для вызова метода render об изменении

в методе инициализации сделать это

_.bindAll(this, 'render'); 
this.listenTo(this, 'change', this.render); 

и вы можете иметь выборки снаружи, если вы хотите

collection.fetch()

, и он будет автоматически обновляться на изменения

+0

может вы объясните, почему это было бы лучше? не совсем уверен. Спасибо :) – alexdmejias

+0

его просто позвоночник путь против jquery способ сделать это .. гораздо чище, чтобы смотреть на тоже я думаю, и вот как это делается в производстве –

+0

Я пытаюсь сделать то, что вы предложили, но я не могу получить его работать. [скрипка] (http://jsfiddle.net/QJJN9/3/) – alexdmejias

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