Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Backbone.js Underline.js-未定义xyz(范围5外的8个)_Backbone.js_Underscore.js_Tastypie_Marionette - Fatal编程技术网

Backbone.js Underline.js-未定义xyz(范围5外的8个)

Backbone.js Underline.js-未定义xyz(范围5外的8个),backbone.js,underscore.js,tastypie,marionette,Backbone.js,Underscore.js,Tastypie,Marionette,我的网站的一部分出现了一个非常奇怪的错误,它是用backbone.js、backbone.marionete构建的。我在模板中使用下划线.js,在REST框架中使用tastypie Firebug输出“ReferenceError:xyz(下划线模板中的位置)未定义”。(8超出范围5) 当我将其追溯到underline-min.js文件时,它没有8行,因为它是一个min文件。这是意料之中的 然而,我怀疑是语法错误,因为手动操作控制台中的变量可以正常工作 我可以从REST框架手动定义一个名称模型获

我的网站的一部分出现了一个非常奇怪的错误,它是用backbone.js、backbone.marionete构建的。我在模板中使用下划线.js,在REST框架中使用tastypie

Firebug输出“ReferenceError:xyz(下划线模板中的位置)未定义”。(8超出范围5)

当我将其追溯到underline-min.js文件时,它没有8行,因为它是一个min文件。这是意料之中的

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

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

我怀疑NameView模板:u.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);

});
Name=tastypemodel.extend({
urlRoot:“/api/v1/names/Calvin”
});
//返回一个数组{'name':'Calvin','age':32等..}
NameView=Backbone.marionete.ItemView.extend({
型号:姓名,
模板:uu.template(“我的名字是”),
标记名:“p”,
初始化:函数(){
this.bindTo(this.model,“change”,this.render);
}
});
MyApp.addInitializer(函数(选项){
var name=新名称();
name.fetch();
var nameview=新的nameview({
型号:姓名
});
MyApp.testSection.show(nameview);
});

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

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

    });

});

在fetch方法的成功回调中创建并显示视图。由于它是一个异步调用,因此可能正在创建问题SmartionNet使用下划线作为编译模板的默认值。因此您可以避免这样做。您的模板声明看起来很好。渲染方法在哪里?testSection.show()做什么?在render方法中,确保模型在传递到模板中时正在调用.toJSON(),因为主干模型属性实际上存储在model.attributes中。使用Marionette.async可以吗?我还希望在单页应用程序上显示其他信息,在发生更改时,我希望将这些信息呈现为“实时”。不要使用marionete.async。它已经过时,不再维护。您需要的只是模型上的事件处理程序。收听“更改”事件并根据需要更新DOM。谢谢!顺便说一句,我喜欢木偶。