Handlebarsテンプレートエンジンを使用しています。
だから、モデルがあります:
Backbone.Model.extend({
urlRoot: Config.urls.getClient,
defaults: {
contract:"",
contractDate:"",
companyTitle:"",
contacts:[],
tariff: new Tariff(),
tariffs: [],
remain:0,
licenses:0,
edo:""
},
initialize:function(){
this.fetch();
}
});
次に、マリオネットItemView:
Marionette.ItemView.extend({
template : templates.client,
initialize: function () {
this.model.on('change', this.render, this);
},
onRender: function () {
console.log(this.model.toJSON());
}
});
そして、私はすべてを次のように呼び出します:
new View({
model : new Model({id:id})
})
そして、それはすぐに私のためにビューをレンダリングし、これはクールです。しかし、モデルがデータをフェッチした後、それがトリガー「変更」であるため、コンソールにシリアル化されたモデルが2回表示されます。
ただし、ビューは更新されません。
どうすれば修正できますか?
追伸fetch doneコールバックでrenderメソッドを呼び出すことができることを理解しています。しかし、ユーザーがモデルを変更するときのさらなるアクションにも必要です。
実際、BackboneとMarionetteはそれを行うのに十分賢いです。
問題はテンプレートとデータにあり、私が見つけたとおりです 別の質問 。だから、私はすべてを再確認し、結果を得ました。
ビューでは、次のコードを使用できます
modelEvents: {
'change': 'render'
}
の代わりに
initialize: function () {
this.model.on('change', this.render, this);
},
onRender: function () {
console.log(this.model.toJSON());
}