骨干视图不呈现json属性

时间:2014-01-10 12:42:45

标签: json templates backbone.js view render

编辑:我找到了发行版。下面发布的json文件是urlRoot = "../api/modul/:number"的返回。但是由于我正在创建一个ModulCollection,因此一个模块的urlRoot永远不会被调用。 ModulCollectionurl = "../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;
    },
});

0 个答案:

没有答案