2016-01-12 31 views
0

我是非常新的骨幹js。Bakbone模型擴展過濾json

我想過濾一些特定的鍵和骨幹js模型中的值擴展這裏是下面的代碼。

var items = ["open","close"]; 
var ReportModel = Backbone.Model.extend({ 
    url: function() { 
     return tab+".json"; 
    } 
}); 

,其中多部未華是動態的JSON文件name.In我的JSON文件許多鍵值對,是有,但我想加載只有那些在項目列表中提到的關鍵。 我看到了一些使用解析函數的地方,但那個;所以沒有工作出來。請讓我知道如何過濾使用骨幹的json的特定鍵。 我也嘗試從json創建一個字典,並將其傳遞給模型。

 var ReportModel = Backbone.Model.extend({ 
    "open":{.......} 
     }); 

但在那裏我得到了問題。

throw new Error('A "url" property or function must be specified'); 

請幫我解決這個問題。

+0

想知道答案是否有助於.. HTTPS ://stackoverflow.com/help/someone-answers –

回答

0

您錯過了一些步驟,以便在您的任務上取得成功。

首先對錯誤進行說明:在傳遞函數時,Backbone需要url屬性中的字符串。如果你想使用函數來返回你的網址,請使用urlRoot

現在轉到實際編碼: 因爲您談論的是具有多個鍵值的json文件,也許您應該將模型聲明爲鍵值對象,然後創建一個將包裹模型的Backbone.Collection。 A Backbone.Collection公開了很多可以幫助我們建模結果的實用程序,在這種情況下,通過使用我們集合的where()函數,您將能夠在從遠程文件中檢索到數據後過濾數據。

如果您需要對功能進行更多的控制,您可以隨時調用不需要的功能filter(),您也可以過濾收藏夾。

請參閱underscorebackbone的官方文檔,因爲您會發現很多可以幫助您的功能,並且大多數功能都有一個示例來說明如何使用它們。

現在我們所擁有的一切,讓我們創建我們的Backbone.Collection撫慰您已經定義模型:如果你要過濾你可以簡單地獲取集合的結果,並在其上進行過濾

現在:

var myReports = new ReportCollection(); 
//call the fetch method to retrieve the information from remote 
myReports.fetch({success: function(){ 
    //the collection has been fetched correctly, call the native where function with the key to be used as a filter. 
    var filteredElements = myReports.where({my_filter_key : my_filter_value}); 

}); 

在filteredElements你將有對象的數組中的所有模型的組成匹配傳遞給那裏的功能鍵/值。 如果你需要一個新的集合從您只需將結果傳遞作爲參數:var filteredCollection = new ReportCollection(filteredElements);

0

您可以在分析方法使用_.pick(),如下圖所示:

var items = ["open", "close"]; 
var ReportModel = Backbone.Model.extend({ 
    url: function() { 
    return tab + ".json"; 
    }, 
    parse: function(response) { 
    return _.pick(response, items); 
    } 
});