编辑:我找到了发行版。下面发布的json文件是urlRoot = "../api/modul/:number"
的返回。但是由于我正在创建一个ModulCollection
,因此一个模块的urlRoot
永远不会被调用。 ModulCollection
从url = "../api/module"
获取json文件。这让我想到了下一个问题。如何调整modul模型中的urlRoot并传递参数,以便调用一个模块的服务器路由?
我尝试了一下,所以我也编辑了下面的代码。
我的服务器生成的json数据有问题。我正在使用Slim PHP Micro Framework。只渲染和显示json的前3个属性。服务器响应正确的数据,例如json如下所示:
{ "modulnummer":"7500", "bezeichnung":"2D-Bildanalyse", "semester":"5", "liste":"GI", "voraussetzung":"some text in here", "lernziele":"some text in here", "aufwand":"some text in here", "bewertung":"some text in here", "lehrform":"some text in here", "credits":"some text in here", "bild":"", "literatur":[{ modulnummer":"7500", "literaturid":163, "autor":"Steinm\u00fcller", "titel":"Bildanalyse", "verlag":"Springer", "jahr":"2008", },{ modulnummer":"7500", "literaturid":163, "autor":"otherr", "titel":"title", "verlag":"pub", "jahr":"2008", }], "dozent":[{ "name":"D\u00f6rner", "bid":3, "modulnummer":"7500", "dozentid":3}, { "name":"Schulz", "bid":15, "modulnummer":"7500", "dozentid":15} ]}
模型,集合和视图
window.Modul = Backbone.Model.extend({
defaults : {
"modulnummer" : "",
"name" : "",
"bezeichnung" : "",
"liste" : "",
"voraussetzung" : "",
"inhalte" : "",
"lernziele" : "",
"aufwand" : "",
"bewertung" : "",
"lehrform" : "",
"credits" : "",
"bild" : "",
"dozenten" : ""
},
urlRoot : function() {
if (!this.isNew()) {
return "../api/module";
} else {
return "../api/modul/" + modulnummer;
}
},
});
window.ModulCollection = Backbone.Collection.extend({
model : Modul,
url : "../api/module",
});
window.ModulView = Backbone.View.extend({
template : _.template($('#modul-details').html()),
initialize : function() {
var self = this;
},
render : function(eventName) {
$(this.el).html(this.template(this.model.toJSON()));
return this;
},
close : function() {
$(this.el).unbind();
$(this.el).empty();
}
});
,模板看起来像这样(关于戴维斯回复的编辑)
<script type="text/template" id="modul-details">
<div class="modulDetails">
<div class="block" id="content-inner">
<div class="span_1 col">
<h1><%-bezeichnung%></h1>
<span class="modulnumer"><%-semester%>.Semester</span>
<span class="semester"> </span>
</div>
<div class="span_1 col">
<h2>Inhalte</h2>
<p><%-inhalte %></p>
</div>
<div class="span_1 col">
<h3>Credits: </h3><p><%-credits %></p>
<h3>Dozenten: </h3>
<p>
<%-dozenten%>
</p>
<h3>Voraussetzung: </h3><p><%-voraussetzung %></p>
</div>
</div>
</div>
</script>
在路由器中我有以下路线:
routes : {
'' : 'home',
'module' : 'module',
'module/:modulnummer' : 'getModul',
"*path" : "notFound"
},
getModul : function(modulnummer) {
console.log("getModul " + modulnummer);
var self = this;
this.modul = new Modul({
'modulnummer' : modulnummer
});
this.modul.fetch({
success : function() {
console.log(self.modul);
if (self.modulView) {
self.modulView.close();
}
self.modulView = new ModulView({
model : self.modul
});
self.changeView(self.modulView);
}
});
},
我只是在我的模型中解析了一些属性。只有'semester'和'bezeichnung'才会显示在渲染的html中。我试图更改json文件的表示形式以及更改为模型或视图。但我不知道如何让骨干显示来自json的所有值。我在这里看到了一个解决方案,其中有人能够在我的示例中显示内部json(“dozent”),但这对于显示像“voraussetzung”这样的正常值没有帮助。
提前致谢
编辑2:GOT IT! This was the answer我改变了这样的模型:
window.Modul = Backbone.Model.extend({
initialize : function(options) {
this.modulnummer = options.modulnummer;
},
defaults : {
"modulnummer" : null,
"name" : "",
"bezeichnung" : "",
"liste" : "",
"voraussetzung" : "",
"inhalte" : "",
"semester" : "",
"lernziele" : "",
"aufwand" : "",
"bewertung" : "",
"lehrform" : "",
"credits" : "",
"bild" : "",
"dozenten" : ""
},
url : function() {
var base = '../api/module';
if (!this.isNew())
return base;
return base + (base.charAt(base.length - 1) == '/' ? '' : '/') + this.modulnummer;
},
});