我是骨干js的新手。
我正在尝试过滤骨干js模型中的一些特定键和值,这里的代码扩展如下。
var items = ["open","close"];
var ReportModel = Backbone.Model.extend({
url: function() {
return tab+".json";
}
});
其中tabe是动态json文件名。在我的json文件中有很多键值对,但我只想加载项目列表中提到的那些键。 我看到一些使用parse函数的地方,但是a;所以没有用。请让我知道如何使用主干过滤json的特定键。 我也试过从json创建一个dict并将它传递给类似的模型。
var ReportModel = Backbone.Model.extend({
"open":{.......}
});
但我遇到了问题。
抛出新错误(' A" url"必须指定属性或功能');
请帮我解决这个问题。
答案 0 :(得分:0)
您缺少一些成功完成任务的步骤。
首先注意错误:Backbone在传递函数时需要url
属性上的字符串。如果您想使用函数返回您的网址,请使用urlRoot
。
现在进入真正的编码:
既然你谈到了一个具有多个键值的json文件,也许你应该将你的模型声明为一个键值对象,然后创建一个Backbone.Collection
来包装你的模型。
Backbone.Collection
公开了许多可以帮助我们对结果建模的实用程序,在这种情况下,通过使用我们集合的where()函数,您可以在从远程文件中检索后过滤数据
如果您需要对该功能进行更多控制,可以选择过滤您的收藏,您可以随时调用非关键字函数filter()。
请参阅underscore和backbone的官方文档,因为您会发现许多可以帮助您的功能,而且大多数功能都有一个示例,说明如何使用它们。
现在我们已经拥有了所有东西,让我们创建一个Backbone.Collection来包装已定义的模型:
var ReportCollection = Backbone.Collection.extend({
model: ReportModel,
urlRoot: function(){
return 'yoururl.json';
}
});
现在,如果要过滤结果,只需获取集合并对其执行过滤:
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中,您将拥有一个对象数组,该对象数组由与传递给where函数的键/值匹配的所有模型组成。
如果你需要一个新的Collection,你只需要将结果作为参数传递:var filteredCollection = new ReportCollection(filteredElements);
答案 1 :(得分:0)
您可以在解析方法中使用_.pick()
,如下所示:
var items = ["open", "close"];
var ReportModel = Backbone.Model.extend({
url: function() {
return tab + ".json";
},
parse: function(response) {
return _.pick(response, items);
}
});