Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/461.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/grails/5.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
Javascript Backbone.js视图属性中的变量_Javascript_Backbone.js_Attributes_Underscore.js - Fatal编程技术网

Javascript Backbone.js视图属性中的变量

Javascript Backbone.js视图属性中的变量,javascript,backbone.js,attributes,underscore.js,Javascript,Backbone.js,Attributes,Underscore.js,我试图通过在视图中使用模型的属性作为变量来呈现HTML块 App = Backbone.Model.extend({ contentType: "text" }); AppView = Backbone.View.extend({ ContentTpl: _.template( $('#slide-'+this.model.get('contentType')).html() ), render: function(){

我试图通过在视图中使用模型的属性作为变量来呈现HTML块

App = Backbone.Model.extend({
        contentType: "text"
        });

AppView = Backbone.View.extend({
        ContentTpl: _.template( $('#slide-'+this.model.get('contentType')).html() ),

        render: function(){
             $('#wrapper').html( this.ContentTpl() );    
        }
        });

var app = new App();
var appView = new AppView({model: app});
appView.render();
HTML:


这是一个测试


但这会导致错误…

您将视图定义错误

你有

AppView = Backbone.Model.extend({
应该是

AppView = Backbone.View.extend({
并且,在初始化视图之前,您无法计算this.model,请改为执行以下操作:

ContentTpl: function() {
   return _.template( $('#slide-'+ this.model.contentType).html() );
},
而且,contentType不是模型属性,它是模型对象上的属性,不能使用get()

要将其定义为模型属性,您必须将其定义为模型中的默认值,或者在实例化对象时传递它:

var app = new App({contentType: 'text'});


你把你的观点定义错了

你有

AppView = Backbone.Model.extend({
应该是

AppView = Backbone.View.extend({
并且,在初始化视图之前,您无法计算this.model,请改为执行以下操作:

ContentTpl: function() {
   return _.template( $('#slide-'+ this.model.contentType).html() );
},
而且,contentType不是模型属性,它是模型对象上的属性,不能使用get()

要将其定义为模型属性,您必须将其定义为模型中的默认值,或者在实例化对象时传递它:

var app = new App({contentType: 'text'});


您必须在
initialize
函数中加载模板<代码>此时不存在此.model

initialize: function() {
    this.ContentTpl = _.template( $('#slide-'+this.model.get('contentType')).html() );
}
然而,这仍然是一个不好的模式形式主干。我会把它作为一种选择

var template = $('#slide-'+this.model.get('contentType')).html();
var appView = new AppView({model: app, ContentTpl: template });
...

// in your view
initialize: function(options) {
    this.ContentTpl = _.template( options.ContentTpl );
}

您必须在
initialize
函数中加载模板<代码>此时不存在此.model

initialize: function() {
    this.ContentTpl = _.template( $('#slide-'+this.model.get('contentType')).html() );
}
然而,这仍然是一个不好的模式形式主干。我会把它作为一种选择

var template = $('#slide-'+this.model.get('contentType')).html();
var appView = new AppView({model: app, ContentTpl: template });
...

// in your view
initialize: function(options) {
    this.ContentTpl = _.template( options.ContentTpl );
}


你得到了什么错误?未捕获类型错误:无法调用未定义的方法“get”你得到了什么错误?未捕获类型错误:无法调用未定义的方法“get”,我在帖子中忘记了这一点。当然,我的代码中有'this.ContentTpl()'。我编辑了我的第一篇博文,这背后的真正含义是,当您通过执行AppView=Backbone.view.extend({})来定义视图时。。。javascript将评估您在AppView对象中定义的每个属性。(它将尝试运行u.template(…))您甚至会在实际实例化视图之前就发现错误,因为此.model不可用。如果您将其定义为函数,javascript会知道ContentTpl是一个函数,在您告诉它之前,它不会运行它。您的代码会导致jQuery警告:event.returnValue已弃用。请改用标准的event.preventDefault()。我可以忽略这一点吗?这只是因为我在JSFIDLE中使用了非常旧的jquery版本。:)试试这个:我将下划线、backbonejs和jquery更改为最新版本。sry,我在帖子中忘记了这一点。当然,我的代码中有'this.ContentTpl()'。我编辑了我的第一篇博文,这背后的真正含义是,当您通过执行AppView=Backbone.view.extend({})来定义视图时。。。javascript将评估您在AppView对象中定义的每个属性。(它将尝试运行u.template(…))您甚至会在实际实例化视图之前就发现错误,因为此.model不可用。如果您将其定义为函数,javascript会知道ContentTpl是一个函数,在您告诉它之前,它不会运行它。您的代码会导致jQuery警告:event.returnValue已弃用。请改用标准的event.preventDefault()。我可以忽略这一点吗?这只是因为我在JSFIDLE中使用了非常旧的jquery版本。:)试试这个:我将下划线、backbonejs和jquery更改为最新版本。@FLuttenb它不是全局的,而是实例属性。你可以使用
渲染
来实现它。ContentTpl
。这是个坏主意,因为我有很多这样的模板,我想在我的主干模型中保留尽可能多的代码。@FLuttenb一个模型并不是存储模板的理想之选。所以一般来说,在主干模型/视图之外创建模板是一个好主意吗然后作为一个选项加载它?如果我有大约10个模板怎么办?@FLuttenb另外,
this
(视图)的
model
属性是一个实例属性。@FLuttenb它不是全局的,而是一个实例属性。你可以使用
渲染
来实现它。ContentTpl
。这是个坏主意,因为我有很多这样的模板,我想在我的主干模型中保留尽可能多的代码。@FLuttenb一个模型并不是存储模板的理想之选。所以一般来说,在主干模型/视图之外创建模板是一个好主意吗然后作为一个选项加载它?如果我有大约10个模板呢?@FLuttenb另外,
this
(视图)的
model
属性是一个实例属性。