我有一个观点:
define(['backbone', 'hbs!tmpl/test_tmpl'],
function (Backbone, TestTmpl) {
'use strict';
return Backbone.Marionette.ItemView.extend({
initialize: function () {
this.projects = {};
},
template: TestTmpl,
templateHelpers: function () {
return {
projects: this.projects
}
},
ui: {},
events: {},
onRender: function () {
this.projects = {title: 'a'};
return this;
}
});
});
然后在视图中:
{{#each projects}}{{this.title}}{{/each}}
在onRender()
方法中我更新项目this.projects = {title: 'a'};
,当设置时,我希望视图数据也更新
任何想法?
答案 0 :(得分:0)
尝试致电
this.render();
通常,您会使用集合视图而不是项目视图 如果您在包装元素周围需要更多HTML,请使用复合视图。
请注意,当您传递集合视图时,它会使用Backbone Collection:
var collectionview = new CollectionView({ collection: bbCollection });
itemview采用模型:
var itemview = new ItemView({ model: bbModel});
对于您的示例,使用集合视图无需在模板中创建循环 您可以通过调用
来访问当前itemview的属性this.model.get("property");
在项目视图上。
在你的例子中,在我看来你宁愿拥有一个数组而不是一个对象:
var projects = [{ title: "X"}, { title: "Y" }];
您可以通过以下方式动态创建Backbone集合:
var projects_collection = new Backbone.Collection(projects);
并将其传递给collectionview:
//First create a Marionette Collectionview, then:
var projectsCollview = new ProjectsCollview({ collection: projects_collection });