1

と の 2 つのモジュールがitemView.jsありListView.jsます。
データをフェッチすると、すべてが機能します。

問題はitem view、対応機種を変更した場合の(1)についてです。

a) (2)は、モデルが(3) と等しい値をListView.js持つすべてのオブジェクトを表示しますclosedfalse

b) closeTask(1) のアクションは、モデルの値を
からclosed: falseに変更します。closed: 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
    },
    ….
];

PS:

コレクションをフェッチすると、サーバーは、closed 属性が false に等しいモデルのみを提供します。

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

1 に答える 1

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

});
于 2012-07-03T14:43:28.737 に答える