用json编码的php数组填充Backbone集合
Populate Backbone collection with json encoded php array
我正在做一个简单的测试。从json编码的php数组填充一个Backbone集合。
var MyObjectModel = Backbone.Model.extend({
parse:function(response){
return JSON.parse(response);
}
});
var MyObjectView = Backbone.View.extend({
template: _.template('<a id="<%= id %>" href="#"><%= name %></a> '),
render: function(){
this.$el.html(this.template(this.model.attributes));
return this;
}
});
var MyList = Backbone.Collection.extend({
url: 'testRest.php',
model: MyObjectModel
});
var MyListView = Backbone.View.extend({
el:$("#app"),
initialize: function(){
this.collection.on('add',this.addOne,this);
this.collection.on('reset',this.addAll,this);
},
addOne: function(objectModel){
var objectView = new MyObjectView({model: objectModel});
this.$el.append(objectView.render().el);
},
addAll: function(){
this.$el.empty();
this.collection.forEach(this.addOne,this);
},
render: function(){
return this;
}
});
var myList = new MyList();
var myListView = new MyListView({collection:myList});
myList.fetch().done(function(){
myListView.render();
});
HTML页面是尽可能基本的
<!DOCTYPE html>
<html>
<head>
<title>TEST</title>
</head>
<body>
<div id="app"></div>
<script type="text/javascript" src="jquery-2.1.1.min.js"></script>
<script type="text/javascript" src="underscore-min.js"></script>
<script type="text/javascript" src="backbone-min.js"></script>
<script type="text/javascript" src="test2.js"></script>
</body>
</html>
当testst .php文件包含
时,它可以正常工作echo json_encode("{'"id'":'"4'",'"name'":'"one'",'"color'":'"ff6600'",'"phoneNumber'":'"+123456789'"}");
但是当我试图在返回的对象中有多于一个项时:
echo json_encode("[{'"id'":'"4'",'"name'":'"one'",'"color'":'"ff6600'",'"phoneNumber'":'"+123456789'"},{'"id'":'"1'",'"name'":'"two'",'"color'":'"800080'",'"phoneNumber'":'"'"}]");
出现错误:
Uncaught ReferenceError: id is not defined
有人遇到同样的问题吗?我错过什么了吗?
你的主干代码没有问题,但你的php脚本做错了两件事:
1)设置Content-type报头为json2) json_encode
接受php数组
<?php
header('Content-Type: application/json');
$resp = array(
array(
'id' => 4,
'name' => 'one',
'color' => 'ff6600',
'phoneNumber' => '+123456789'
),
array(
'id' => 1,
'name' => 'two',
'color' => '80080',
'phoneNumber' => ''
)
);
echo json_encode($resp);
也正如我在评论中所说的,你不需要做JSON.parse
, jQuery已经解析到一个对象,只要设置了Content-type
头。parse的默认Backbone方法已经返回了响应对象,所以您根本不需要重写(除非您正在获取嵌套数据)。
相关文章:
- 如何设置html元素填充的动画
- 如何使用jquery在填充自动完成的值后使文本框只读
- 如何通过ajax刷新JSF填充的javascript变量
- backbone.js无法渲染视图
- 用与线条相同的颜色填充多折线图上的点
- 用每小时的差值填充数组/列表-从下拉列表中给定两个时间值
- 如何使用backbone.js从集合中获取模型名称
- 带有填充属性的SVG矩形显示在包含元素的上方插入框阴影
- 用我的json数据填充JQuery DataTable
- Backbone.js在填充集合后调用render
- 我可以't填充backbone.js视图
- 使用 RequireJS 2.0.1 和填充码加载 jQuery、Underscore 和 Backbone
- Backbone Marionette.js reqres框架没有'不要等待集合被填充
- 无法从backbone.js教程中填充主干集合
- 用json编码的php数组填充Backbone集合
- 将Backbone.js JSON响应填充到嵌套集合/模型中的嵌套集合中
- 如何使用browerify-shim正确地填充jquery / Backbone
- 如何使用Backbone.dualStorage.js用具有相同ID的远程模型重新填充本地存储
- 为什么Backbone's collection create()方法未填充id
- 用Backbone.js填充save()发送的JSON对象