如何根据骨干和牵线木偶中的对象更改来更新视图?

时间:2015-01-03 08:23:49

标签: javascript events backbone.js marionette

我有一个观点:

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'};,当设置时,我希望视图数据也更新

任何想法?

1 个答案:

答案 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 });