微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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);

原文地址:https://www.jb51.cc/js/152183.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐