2013-12-11 162 views
1

在我想要的地方获取我的数据时遇到了一些麻烦。骨干。从路由器传递参数到查看/收集?

在我的路由器,我路过一个ID像这样的功能:

routes: { 
     'deck/:id': 'getDeckId' 
    }, 
    getDeckId: function(id) { 
     this.loadView(new DeckView()) 
    }, 
    loadView: function(view) { 
     this.view && (this.view.kill ? this.view.kill() : this.view.remove()); 
     this.view = view; 
    } 

在我的收藏我加载一个JSON文件。对于该URL,我想添加我在路由器中传递的ID。

var DeckCollection = Backbone.Collection.extend({ 
    model: DeckModel, 
    url: "myUrl"+id, //the id i passing from my router 
    parse: function (response) { 
     return response; 
    }, 
    initialize: function() { 

    }, 
    return DeckCollection; 
}); 

视图

var DeckView = Backbone.View.extend({ 
    //initialize etc 
}); 

所以当视图初始化,我想从路由器传递的ID加载该JSON。我会怎么做?

回答

1

将ID传递给DeckView构造函数。

routes: { 
    'deck/:id': 'getDeckId' 
}, 
getDeckId: function(id) { 
    this.loadView(new DeckView({deckId: id})) 
}, 
loadView: function(view) { 
    this.view && (this.view.kill ? this.view.kill() : this.view.remove()); 
    this.view = view; 
} 

创建将使用ID和URL

var DeckCollection = Backbone.Collection.extend({ 
    id: '', 
    model: DeckModel, 
    url: function() { 
     return 'myURL' + this.id; 
    } 
}); 

集收藏的id网址功能时,视图初始化

var DeckView = Backbone.View.extend({ 
    initialize: function (options) { 
     this.decks = new DeckCollection(); 
     this.decks.id = options.id; 
     this.decks.fetch(); 
    } 
}); 
+0

谢谢!实现你的代码,但ID似乎在集合中未定义.. – user2952238

+0

对不起。我的错!搞砸了甲板ID和ID。保护你! – user2952238

+0

我有一个问题,我怎么能在这里传递id'getDeckId:function(id)'??我没有得到这 –