Underscore.js - 未定义xyz(范围5中的8个)

时间:2012-11-16 08:05:45

标签: backbone.js underscore.js tastypie marionette

我的网站的一部分出现了一个非常奇怪的错误,它是使用backbone.js,backbone.marionette构建的。我使用underscore.js作为REST框架的模板和tastypie。

Firebug输出“ReferenceError:xyz(未在下划线模板中<%= xyz%>)”。 (8个超出范围5)。

当我将其追溯到underscore-min.js文件时,它没有8行,因为它是一个min文件。这是可以预期的。

但是,我怀疑是语法错误,因为在控制台中手动操作变量可以正常工作。

我可以从REST框架手动定义名称模型提取,并在其视图中呈现它。我甚至可以使用MyApp.testSection.show(“渲染视图”)正确地将它输出到前端。没有任何问题。

我怀疑NameView模板中的语法有问题:_.template(...)section或MyApp.addInitializer

以下代码

Name = TastypieModel.extend({

    urlRoot:'/api/v1/names/Calvin'

});

//returns an array {'name':'Calvin', 'age':32, etc....}

NameView = Backbone.Marionette.ItemView.extend({
    model: Name,
    template: _.template("<h1>My name is <%= name %></h1>"),
    tagName: 'p',

    initialize: function(){
        this.bindTo(this.model, "change", this.render);
    }
});

MyApp.addInitializer(function(options){

    var name = new Name();

    name.fetch();

    var nameview = new NameView ({
        model: name
    });


    MyApp.testSection.show(nameview);

});

1 个答案:

答案 0 :(得分:2)

问题很可能是由您提取数据引起的。

model.fetch()是一个异步操作,但您的代码并未考虑到这一点。您使用没有数据的模型渲染视图,因为在调用fetch之后立即进行渲染,而不是等待获取模型。


MyApp.addInitializer(function(options){

    var name = new Name();

    var fetched = name.fetch();

    // wait for the model to be fetched
    $.when(fetched).then(function(){

      var nameview = new NameView ({
        model: name
      });

      MyApp.testSection.show(nameview);

    });

});