2013-07-03 26 views
0

我嘗試生成與來自2個不同的REST服務值的骨幹集合。我得到了1 REST服務,給了我一個清單,一般Propertys例如:Backbone.js的從不同的ressource propertys的模型進入

{["id":"31", "folder":"fid3223"]} 
{["id":"12", "folder":"fid2323"]} 

我取他們集合中,現在我要爲每一個模型讓他Propertys,我只能從另一個休息的ressource通過獲得他的身份證。我想在這樣的集合中保護它們:

{["id":"31", "folder":"fid3223", propertys["prop1":"value1","prop2":"value2","prop3":"value3"]]} 
{["id":"12", "folder":"fid2323",propertys["prop1":"value1","prop2":"value2","prop3":"value3"]]} 

是否是一種使用主幹實現此功能的簡單方法?

回答

0

首先,我認爲你的「模式」從REST服務1取應該是這樣的:

{"id":"31","folder":"fid3223"} 
{"id":"32","folder":"fid2323"} 

一個對象代表一個列表項吧?

而且您的合併集合應該是這樣的:

[{"id":"31","folder":"fid3223","propertys":{"prop1":"value1","prop2":"value2","prop3":"value3"}} 

你想這兩個REST服務的數據合併到一個集合。當您的數據設置了唯一的id屬性時,骨幹提取方法將執行「智能」提取。因此,您可以將Rest1服務獲取到集合中,並動態地將其url屬性更改爲Rest2 url,然後再次獲取。相同的ID列表數據將被合併。

簡單的例子:

型號:

var List = Backbone.Model.extend({ 

}); 

收藏:

var Lists = Backbone.Collection.extend({ 
    model: List, 
    url:"ur/url/to/rest1" 
}); 

var lists = new Lists(); 

查看:(checkItem功能會幫你看看有什麼發生模型你的收藏)

var ListView = Backbone.View.extend({ 
    el: "#list-view", 
    initialize: function(){ 
     this.listenTo(lists,"add",this.checkItem); 
     this.listenTo(lists,"change",this.checkItem); 
    }, 
    checkItem: function(model){ 
     console.dir(model); 
}); 

var listView = new ListView(); 

$("#basic-btn").click(function(){ 
    lists.fetch(); 
}); 

$("#property-btn").click(function(){ 
    lists.url = "ur/url/to/rest2"; 
    lists.fetch(); 
}); 

HTML:

<!DOCTYPE html> 
<html> 
<head> 
<title></title> 
<script type="text/javascript" src="js/jquery-1.8.2.js"></script> 
<script type="text/javascript" src="js/jquery-easing-1.3.js"></script> 
<script src="js/bootstrap.min.js"></script> 
<!--backbone--> 
<script type="text/javascript" src="js/backbone/underscore.js"></script> 
<script type="text/javascript" src="js/backbone/backbone.js"></script> 

<script type="text/javascript" src="js/test.js"></script> 
</head> 
<body> 
<button id="basic-btn">load basic</button> 
<button id="property-btn">load property</button> 
<ul id="list-view"> 
</ul> 
</body> 
</html> 

首先我點擊 「基本-BTN」,將得到這樣的結果:

enter image description here

然後我點擊 「屬性-BTN」 和屬性將被合併到存在的列表項中:

enter image description here

希望這對你有幫助。

+0

非常感謝,但我忘了說我必須爲每個元素獲取屬性。這意味着我必須爲我的收藏中的每個模型做一個單獨的休息呼叫。用模型的id。 –

1

我認爲你正在尋找合併的Model小號的屬性。

你從服務器的數據後,你可以做這樣的事情:

var models = [ {..}, {..} ]; // Two javascript objects holding the attributes, let's assume these are from the second fetch 
collection.set(models, { merge: true }); // Here Backbone will look for existing objects in that collection and merge their attributes 

你如何獲取數據是另一回事。
如果它使用fetch()方法骨幹提供,而新的屬性裏面的propertys應覆蓋集合的parse()方法...請查閱骨幹的文檔。