我試圖建立一個應用程序使用backbone.js和backbone-relational.js在前端,與由金字塔/檐口/ SQLAlchmeny運行RESTful api on後端。backbone.js:如何發送約束時做一個列表GET
在這個階段,我有兩個模型,客戶(基本上是企業)和資產(企業擁有的資產)......並且最終還會有一些其他模型,用於用戶,網站等。兩個模型的簡化的例子:
Client:
id
name
Asset:
id
make
model
purchase_cost
client_id
現在,獲取從服務器這些模型中的數據時,我Backbone.js的代碼,目前工作正常;我有兩個列表視圖,一個顯示所有客戶端的列表,另一個顯示所有資產的列表。
我現在的問題是,當我點擊客戶端列表中的某個客戶端時,我希望它只顯示屬於該特定客戶端的資產列表。服務器端部分沒有問題,它只是一個過濾器(),我的問題是,當請求資產列表時,如何讓backbone.js發送這樣的約束?
(雖然我在下面的代碼中使用RelationalModel,我還在學習它並沒有真正制定出如何利用它尚未)
window.Asset = Backbone.RelationalModel.extend({
urlRoot:"/api/assets",
defaults:{
"id":null,
"make":null,
"model":null,
"purchase_cost":null,
},
relations: [{
type: Backbone.HasOne,
type: Backbone.HasOne,
key: 'client_id',
relatedModel: Client
}]
});
window.AssetCollection = Backbone.Collection.extend({
model: Asset,
url: "/api/assets"
});
window.Client = Backbone.RelationalModel.extend({
urlRoot:"/api/clients",
defaults:{
"id":null,
"name":null
}
});
window.ClientCollection = Backbone.Collection.extend({
model: Client,
url: "/api/clients"
});
我不認爲我需要在這裏顯示任何視圖。在我的路由器中,我目前有一個listClients函數和一個listAssets(見下文)函數,我想我需要添加一個listAssetsforClient(clientid)函數,但我不確定我的意思處理clientid,這樣backbone.js會在獲取Assets列表時將它作爲約束髮送給服務器。我認爲無論需要做什麼都會在AssetCollection模型中進行,但我看不到Collection API中看起來合適的任何東西。有一些方法可以在已經獲取的列表上進行過濾,但是當我只需要其中的一部分資源時,獲取資源的整個列表(並且最終可能會有成千上萬)似乎效率低下,並且可以使服務器改爲過濾。
listAssets: function() {
$('#header').html(new AssetHeaderView().render().el);
this.assetList = new AssetCollection();
var self = this;
this.assetList.fetch({
success:function() {
self.assetListView = new AssetListView({model:self.assetList});
$('#sidebar').html(self.assetListView.render().el);
if (self.requestedId) self.assetDetails(self.requestedId);
}
});
},
我認爲,而不是$('#header')。html(新的AssetHeaderView()。render()。el);你應該使用$('#header')。append(new AssetHeaderView()。render()。$ el);但也許我錯了。 – Naor