Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/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
Templates backbone.js:模板可以';我不认识这个模型_Templates_View_Model_Backbone.js_Underscore.js - Fatal编程技术网

Templates backbone.js:模板可以';我不认识这个模型

Templates backbone.js:模板可以';我不认识这个模型,templates,view,model,backbone.js,underscore.js,Templates,View,Model,Backbone.js,Underscore.js,我有一个模板: <script type="text/template" id="action-template-item"> <span data-layer="<%= target%>" data-uuid="<%= uuid%>">delete</span> </script> 模板只有两个来自模型数据的属性 在渲染之前,我使用控制台检查模型是否有target值,答案是肯定的,就像上面的注释一样 我的模型数据

我有一个模板:

<script type="text/template" id="action-template-item">
    <span data-layer="<%= target%>" data-uuid="<%= uuid%>">delete</span>
</script>
模板只有两个来自模型数据的属性

在渲染之前,我使用控制台检查模型是否有
target
值,答案是肯定的,就像上面的注释一样

我的模型数据如下所示:

{
   target: "xxx-xxx-xxx",
   uuid: "xxx-xxx-xx"
}
但是firebug告诉我
“目标未定义”


发生了什么事?我的代码怎么了?

您的模型可能看起来像这样:

var M = Backbone.Model.extend({});
var m = new M({
   target: "xxx-xxx-xxx",
   uuid: "xxx-xxx-xx"
});
演示(打开控制台,您将看到错误):

所以当你说

//model have "target"
您的意思可能是
this.model.attributes.target
存在。主干模型属性和JavaScript对象属性不是一回事,下划线模板将查找对象属性,它们对主干模型属性一无所知

通常的方法是在要渲染视图时使用序列化模型:

render: function () {
    var tmpl = _.template(this.template);
    this.$el.html(tmpl(this.model.toJSON()));
    return this;
}

演示:

事实上,传入的
this.model
已经是模型的attributes属性之一,它并没有
toJSON
方法,而且我认为
this.model.attributes
是aleady对象类型。你们的意思是我需要将对象类型转换为json类型吗?现在我已经使用了jquery json pulgin,使用$.toJSON方法将对象转换为json数据类型,但仍然无法工作,请告诉我未定义
目标
我知道我的代码有什么问题。这是一个数组项!节点对象类型!不过,非常感谢
render: function () {
    var tmpl = _.template(this.template);
    this.$el.html(tmpl(this.model.toJSON()));
    return this;
}