Javascript 下划线模板可以';t访问数据模型
我在使用下划线访问模型数据时遇到困难,屏幕上没有显示任何内容,也没有出现任何错误。任何帮助都将不胜感激 这是我的模板区Javascript 下划线模板可以';t访问数据模型,javascript,jquery,backbone.js,underscore.js,underscore.js-templating,Javascript,Jquery,Backbone.js,Underscore.js,Underscore.js Templating,我在使用下划线访问模型数据时遇到困难,屏幕上没有显示任何内容,也没有出现任何错误。任何帮助都将不胜感激 这是我的模板区 <script type='text/template' id='ListContainerView'> <p> <%= ListItemModel.id %> </p> <p> <%= ListItemModel.network %> </p> <p> <%= List
<script type='text/template' id='ListContainerView'>
<p> <%= ListItemModel.id %> </p>
<p> <%= ListItemModel.network %> </p>
<p> <%= ListItemModel.created_by_id %> </p>
</script>
视图
var ListContainerView = SOCIView.extend({
template: _.template($('#ListContainerView').text()),
className: 'ListContainerView'
})
var SOCIView = Backbone.View.extend({
render: function() {
if (typeof this.beforeRender === 'function') {
this.beforeRender();
}
var modelData = { };
if (this.model && this.model instanceof Backbone.Model) {
modelData = this.model.toJSON();
}
if (typeof this.template === 'function') {
this.$el.html(this.template(modelData));
}
if (typeof this.afterRender === 'function') {
this.afterRender();
}
return this;
}
})
和HTML内的脚本
<script type="text/javascript">
$(document).ready(function() {
// Instantiate and render Backbone view
$('.home_body').append( new ListContainerView({
collection: new ListItemCollection(),
}).render().el)
});
</script>
$(文档).ready(函数(){
//实例化并渲染主干视图
$('.home_body').append(新的ListContainerView({
集合:新建ListItemCollection(),
}).render().el)
});
如果您为ListContainerView
定义模板,我认为使用.text()
(而不是.html()
)可能会导致您的问题。相反,尝试
template: _.template($('#ListContainerView').html())
看看它是否有效
Jquery的
.text()
忽略html标记,如
或
标记(等),因此它可能也会删除模板标记
,只给您几个空格。主干模型上的toJSON
方法为您提供了模型属性的简单副本。就您而言,这是:
modelData = this.model.toJSON();
应该为您提供一个如下所示的对象:
{
id: 1,
schedule: "2020-0417 17:00:00",
utc_offset: "420",
...
}
<p> <%= id %> </p>
<p> <%= network %> </p>
<p> <%= created_by_id %> </p>
请注意,该对象中的任何位置都没有ListItemModel
。该对象适用于如下所示的模板:
{
id: 1,
schedule: "2020-0417 17:00:00",
utc_offset: "420",
...
}
<p> <%= id %> </p>
<p> <%= network %> </p>
<p> <%= created_by_id %> </p>
调用模板函数时
或者,您可以使用{variable:'ListItemModel'}
选项编译模板,并将模板和this.template
调用单独保留。所以你的观点是:
template: _.template($('#ListContainerView').html(), { variable: 'ListItemModel'),
其余的都不会改变。好建议,不幸的是没有改变。我觉得我很可能使用ListItemModel.id.错误地访问了数据。。我不能把我的手指放在上面…对不起,我看到了一只虫子,但我应该仔细看看。。。我可以看到两件事:您的
listcainerview
有一个模板,但没有呈现方法,因此当您在脚本中调用render时,它不会做任何事情。在渲染中,您应该将集合中的模型数据提供给模板,以便以某种方式进行渲染。按照您的设置方式,为ListContainerView
arender
方法添加模板(将集合中的每个模型输入)到它的el
可能会起作用。当模板位于
容器中且具有适当的内容类型
属性时,.html
就是您想要的。
容器专门用于避免模板中“文本看起来有点像HTML”的问题。