javascript – 获取backbone.js中模型的属性

前端之家收集整理的这篇文章主要介绍了javascript – 获取backbone.js中模型的属性前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有这个模型
var Item = Backbone.Model.extend({
   url: 'http://localhost/InterprisePOS/Product/loaditembycategory/Event Materials'
});

var onSuccess = function(){ alert("success"); };

还有一个系列

var Items = Backbone.Collection.extend({
    model: Item
});

其余的代码在这里:

var item = new Item();
var items = new Items();
item.fetch({ success: onSuccess });
alert(items.get("ItemCode"));

我想要的是简单地获取模型的属性.现在我在萤火虫上有这个.此外,当我在浏览器上运行它时,我获得警报成功,并且下一个警报未定义.

这是输出

{"ErrorMessage":null,"Items":[{"ErrorMessage":null,"CategoryCode":"Event Materials","ClassCode":null,"Components":null,"GroupCode":null,"ImageURL":null,"ItemCode":"ITEM-123","ItemDescription":"Old World Lamppost\u000d\u000a\u000d\u000a","ItemName":"GET123","ItemType":null,"KitItem":null,"Matrix":null,"Prefix":null,"RetailPrice":107.990000,"SalesTaxCode":null,"UPCCode":null,"UnitMeasureCode":"EACH","UnitsInStock":0,"Value":null,"WholesalePrice":95.000000}]}

注意

这只是它返回的项目之一.我刚刚发布了项目,所以它不会那么久.

解决方法

你正在打电话给你的收藏(见 http://documentcloud.github.com/backbone/#Collection-get)

看起来你真正想要的是迭代集合,并调用每个项目的get

items.each(function(item) {
  item.get('ItemCode');
});

如果没有,请详细说明!

此外,如果模型URL响应模型列表,则应该在集合中定义url属性而不是模型.

var Items = Backbone.Collection.extend({
    model: Item,url: 'http://localhost/InterprisePOS/Product/loaditembycategory/Event Materials'
});

并且您的响应应该是一个数组,其中Items作为数组元素[< item1>,< item2>,…],而不是具有{‘Items’的JSON对象:[< item1>,…]}.如果您不想修改响应,则必须在集合上实现解析功能(http://documentcloud.github.com/backbone/#Collection-parse).

另外,正如@chiborg提到的那样,你在fetch之后调用get(它将异步完成),所以无法保证你的数据可用.

这里适当的解决方案是绑定集合上的“刷新”侦听器.

items.on('refresh',function() {
  // now you have access to the updated collection
},items);

猜你在找的JavaScript相关文章