0

我在我的网站的一部分上遇到了一个非常奇怪的错误,该部分是用backbone.js、backbone.marionette 构建的。我将 underscore.js 用于模板,并使用 nicepie 用于 REST 框架。

Firebug 输出“ReferenceError: xyz (where <%= xyz %> in the underscore template) is not defined”。(8 超出范围 5)。

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

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

我可以从 REST 框架中手动定义名称模型提取,并将其呈现在其视图中。我什至可以使用 MyApp.testSection.show("渲染的视图") 将其正确输出到前端,而不会出现任何问题。

我怀疑 NameView 模板中的语法有问题:_.template(...) 部分或 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);

});
4

1 回答 1

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);

    });

});
于 2012-11-16T15:26:36.467 回答