目前我有一个读取 json 文件的基本应用程序。
到目前为止我构建这个的方式是
我有一个调用不同功能的路由器
routes: {
'products/productList' : 'showProducts',
'products/list/:productID' : 'showProductsList',
'products/view/:productID/:productTypeID' : 'showProductsView'
}
showProducts:function(){
var productList=new Products();
var productListView=new ProductListView({collection:productList});
productListView.bind('renderCompleted:Products',this.changePage,this);
productListView.update();
}
showProductsList:function(productID){
var productTypeList=new ProductTypeCollection();
var productTypeListView=new ProductTypeListView({collection:productTypeList});
productTypeListView.bind('renderCompleted:ProductsType',this.changePage,this);
productTypeListView.update(productID);
}
所以我为产品创建了一个模型
var Product=Backbone.Model.extend({
defaults:{
id:"",
name:'',
longName:'',
productID:''
}
});
return Product;
和它的收藏
var Products=Backbone.Collection.extend({
model:Product,
fetch:function(){
var self=this;
var tmpItem;
var jqxhr = $.getJSON("data/product.json")
.success(function(data, status, xhr) {
$.each(data.data.productTypeList, function(i,item){
tmpItem=new Product({id:item.id,name:item.name,longName:item.longName, productID:i});
self.add(tmpItem);
});
//dispatch customized event
self.trigger("fetchCompleted:Products");
})
.error(function() { alert("error"); })
.complete(function() {
console.log("fetch complete + " + this);
});
}
});
return Products;
然后是产品类型的模型
var ProductType=Backbone.Model.extend({
//default attributes
defaults:{
id:"",
name:'',
productID:'',
productTypeID:''
}
});
return ProductType;
拥有自己的收藏
var ProductsType=Backbone.Collection.extend({
model:ProductType,
fetch:function(){
var self=this;
var tmpItem;
var jqxhr = $.getJSON("data/product.json")
.success(function(data, status, xhr) {
$.each(data.data.productTypeList, function(i,item){
tmpItem=new Product({id:item.id,name:item.name,longName:item.longName, productID:i});
self.add(tmpItem);
});
//dispatch customized event
self.trigger("fetchCompleted:ProductsType");
})
.error(function() { alert("error"); })
.complete(function() {
console.log("fetch complete + " + this);
});
}
});
return ProductsType;
这些人各有各的看法
var ProductListView = Backbone.View.extend({
template: _.template(productViewTemplate),
update:function(){
//set callback of the event "fetchCompleted:Products"
this.collection.bind('fetchCompleted:Products',this.render,this);
this.collection.fetch();
},
render: function(){
this.$el.empty();
//compile template using the data fetched by collection
this.$el.append(this.template({data:this.collection.toJSON()}));
this.trigger("renderCompleted:Products",this);
return this;
}
});
return ProductListView;
和 productType 视图
var ProductListTypeView = Backbone.View.extend({
template: _.template(productViewTypeTemplate),
update:function(productID){
//set callback of the event "fetchCompleted:Products"
this.collection.bind('fetchCompleted:ProductsType',this.render,this);
this.collection.fetch(productID);
},
render: function(){
this.$el.empty();
//compile template using the data fetched by collection
this.$el.append(this.template({data:this.collection.toJSON()}));
this.trigger("renderCompleted:ProductsType",this);
return this;
}
});
return ProductListTypeView;
显然,多次加载同一个 json 文件很疯狂,因为这会减慢应用程序的速度,但我想知道如何在 JSON 文件中找到正确的位置
您可以看到第一个集合获取 data.productTypeList 而第二个集合获取 data.productTypeList[productID] 因为这是从 url 传入的。
当 json 加载时,还设置了触发器来启用视图。
我知道它的结构很糟糕,但欢迎提出一些建议
我猜我需要制作一个包含所有较低级别数据的模型,并将它们添加到一个集合中。
这是最好使用 thge 技术吗?文件?
这是一个json文件的例子
http://demo.stg.brightonconsulting.net.au/templates/tests/backboneJQMProducts/data/product.json
谢谢