gpt4 book ai didi

javascript - Backbone无法调用未定义/未加载数据的方法 'toJSON'

转载 作者:行者123 更新时间:2023-12-02 18:09:06 27 4
gpt4 key购买 nike

我正在尝试获取一些数据并使用 Backbone 显示它,但运气不佳 - 我没有收到任何错误,只是没有渲染(我使用 todos 示例作为指导构建了这个非常简单的应用程序)

index.html:

<!doctype html>
<html>
<head>
<title>Hello Backbone</title>
</head>
<body>
<div id="sps-container">
<div id="main">
<ul id="service-providers"></ul>
</div>
</div>
</body>
<script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script>
<script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/underscore.js/1.5.2/underscore-min.js"></script>
<script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/backbone.js/1.1.0/backbone-min.js"></script>
<script type="text/javascript" src="/app.js"></script>

<!-- Templates -->

<script type="text/template" id="sp-template">
<div class="view">
<label><%- name %></label>
</div>
</script>

</html>

app.js

$(function(){

var ServiceProvider = Backbone.Model.extend({
defaults : function() {
return {
id : "",
version : 1,
name : ""
};
}
});

var ServiceProviderList = Backbone.Collection.extend({
url: '/web-admin/faces/Backbone/data.json',
model : ServiceProvider
});

var myCollection = new ServiceProviderList();

var ServiceProviderView = Backbone.View.extend({
el : $("#service-providers"),
tagName : "li",
initialize : function() {
_.bindAll(this, 'render');
this.template = _.template($('#sp-template').html());
this.render();
},
render : function() {
this.$el.html(this.template(this.model.toJSON()));
return this;
}
});

myCollection.fetch(function(c) {
var v = new ServiceProviderView(c);
main.html(v.render().el);
});
var SPView = new ServiceProviderView();
});

数据.json

[
{
"id": "03c88b31-6719-4662-9ad8-64f247de13f0",
"version": 1,
"name": "Dino Tel"
},
{
"id": "936690b4-6a4a-436d-abed-8ca316fbae22",
"version": 1,
"name": "Krusty Tel"
}
]

我认为它没有加载任何数据 - 但没有其他错误,并且 json 文件可用。我错过了什么吗?

最佳答案

您没有在 AppView 中渲染任何内容。另外,ServiceProvider.lenght检查应使用实例 myCollectionServiceProviderView应该被实例化并添加到 AppView 中的 DOM 中.

更新1:

我也不确定是否可以使用 DOM 中的元素作为模板(Marionette 允许这样的事情(使用 layout ),但纯 Backbone 不允许)。您需要输入 AppView进入模板的方式与 ServiceProviderView 相同然后调用$(body).html(appView.render().el) .

更新2:

还有一个问题(至少)。 myCollection.fetch()使用ajax,因此是异步的。当您想要渲染它时,它可能没有获取数据。在 View 之外使用它。

var main = $(body);
myCollection.fetch(function(c) {
var appView = new AppView(c);
main.html(appView.render().el);
}

我看看稍后是否可以将一个工作示例放在一起,但是解决上述所有问题应该会让您接近。

关于javascript - Backbone无法调用未定义/未加载数据的方法 'toJSON',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19848501/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com