1

我正在尝试在 questionListView 中使用渲染功能,它似乎正在运行,但没有更新页面。

模板:

<script id="myTemplate" type="text/template">
 <p>Test</p>
</script>

部分JS:

$(function(){

//Test data
var initialListData = [
    { listName: "Sample Questions", listID: 1},
    { listName: "Default questions", listID: 2}
];

// MODELS ----------------------------------------------------
var questionList = Backbone.Model.extend({
    defaults: {
        listName: "Name of the list",
        listID: 0
    }
});

// COLLECTIONS ----------------------------------------------------
var populateList = Backbone.Collection.extend({
    model: questionList
});

// VIEWS ----------------------------------------------------
var questionListView = Backbone.View.extend({
    template: $("#myTemplate").html(),
    render: function () {
        console.log('I can see this, but nothing happens...');
        var tmpl = _.template(this.template);            
        $(this.el).append(tmpl(this.model.toJSON()));
        return this;
    }
});


var AppView = Backbone.View.extend({
  el : $("#content"),
    initialize: function (){
        this.collection=new populateList(initialListData);
        this.render();
    },
    render: function (){
        _.each(this.collection.models, function (item) {
            this.renderSelect(item);
        }, this);
    },
    renderSelect: function(item){
         var populateQuestionList = new questionListView({
             model: item
        });
        this.$el.append(populateQuestionList.render().el);
    }
});

var app = new AppView();

} (jQuery));

谢谢!

4

1 回答 1

3

您是否在 document.ready 事件的回调中触发此事件?如果没有,您的代码可能在 DOM 实际加载并准备好之前执行。尝试:

$(function () {
    var app = new AppView();
});

一些杂项。

  • 您可以template: _.template($("#myTemplate").html())将模板功能缓存为微优化
  • 您可以在最近版本的主干中使用this.$el而不是。$(this.el)您已经在一个地方这样做了,但不是两者都这样做。
于 2012-05-01T16:51:52.213 回答