Marionette.CompositeView和Marionette.ItemView之间的事件

时间:2012-07-03 14:15:29

标签: javascript backbone.js marionette

我有两个模块itemView.jsListView.js 当我获取数据时,一切都有效。

当我更改相应的模型时,问题是item view(1)。

a)ListView.js(2)显示模型的closed值等于false的所有对象(3)

b)(1)中的动作closeTask改变模型的值
closed: falseclosed: true

c)当b)发生时没有任何变化,
 但如果我重新加载页面,我会得到正确的结果(不会显示closed值等于true的模型。

我该如何解决这个问题?


(1)

// itemView.js
var itemView = Marionette.ItemView.extend({

    initialize: function () {
        this.model.on('change', this.render, this);
    },

    events: {
        'click #close': 'closeTask'
    },

    template: itemTemplate,

    tagName: 'li',

    closeTask: function () {
        if (!this.model.get('closed')) {
            this.model.save({
                closed: true
            });
        }
    }

});

(2)

// ListView.js
var ListView = Marionette.CompositeView.extend({

    template: listTemplate,

    itemView: itemView

});

(3)

// Collection
myCollection.attributes = [
    {
        id: 1,
        name: 'bar'
        closed: false
    },
    {
        id: 2,
        name: 'bar2'
        closed: false
    },
    ….
];

P.S。:

当我获取集合时,服务器只给出了闭合属性等于false的模型。

app.addInitializer(function () {
    myCollection = new MyCollection();
    myCollection.fetch();
});

1 个答案:

答案 0 :(得分:1)

我没有和Marionette合作,但我一直在使用Backbone,我的想法是Marionette没有刷新模板或类似的东西。

如果你试试这会怎么样?

// itemView.js
var itemView = Marionette.ItemView.extend({

    initialize: function () {
        this.model.on('change', this.render, this);
    },

    onRender : function(){
       //verify your model:
       console.log( this.model.toJSON() );
       if (this.model.get('closed')) {
          this.$el.fadeOut();//bye bye item
       }
    },

    events: {
        'click #close': 'closeTask'
    },

    template: itemTemplate,

    tagName: 'li',

    closeTask: function () {
        if (!this.model.get('closed')) {
            this.model.save({
                closed: true
            });
        }
    }

});