私はバックボーンが比較的新しく、この問題を抱えています。これは、以下の私の部分であるindex.dust
最新のモデルを表示していないバックボーン部分図
<div id="parentView">
<div class="section">
{>"app/inc/responseMessage" /}
<div class="userDetails">
{! A button to get user details !}
</div>
</div>
</div>
- -
私はDustJSとバックボーンを使用していますが
マイテンプレートは、次のようになりますresponseMessage.dust
私のJSがこの
<div id="responseMessage">
{@eq key="{data.success}" value="true"}
<div class="alert alert-success success" role="alert">success</div>
{/eq}
</div>
initialize: function() {
this.responseMessageView = this.responseMessageView ||
new ResponseMessageView({
model: new Backbone.Model()
}); // View is for the partial
this.model = this.model || new Backbone.Model(); //View for the whole page
},
以下の関数は、イベントが発生したときに呼び出され、POSTを実行して正常に戻ります。コールバック関数
exports.sendEmail = function sendEmail(req, res){
req.model.data.success = true;
responseRender.handleResponse(null, req, res);
};
this.model
の
primaryViewEventTrigger: function(event){
//Button click on `index.dust` triggers this event and does a POST event to the backend
this.listenToOnce(this.model, 'sync', this.primaryViewSuccess);//this will render the whole view.
this.listenToOnce(this.model, 'error', this.primaryViewError);
this.model.save({data: {x:'123'}});
}
responseViewEventTrigger: function(event){
//Button click on `responseMessage.dust` triggers this event and does a POST event to the backend
this.listenToOnce(this.responseMessageView.model, 'sync', this.responseViewSuccess);//it should only render the partial view - responseMessage.dust
this.listenToOnce(this.responseMessageView.model, 'error', this.primaryViewError);
this.responseMessageView.model.save({data: {x:'123'}});
}
primaryViewSuccess: function(model,response){
this.model.set('data', response.data);
this.render();
}
responseViewSuccess: function(model,response){
this.responseMessageView.model.set('data', response.data);
console.log(this.responseMessageView.model);
this.responseMessageView.render(); // Does not work in some cases
}
私の実装では、ページ全体のモデルに属しています。一方、部分的なモデルはthis.responseMessageView.model
です。
質問:ほとんどの場合、これは完全に正常に機能します。部分モデルを最新のモデル値でレンダリングしないケースが1つあります。ボタンをクリックすると、index.dust
とprimaryViewSuccess
が実行されます。その後、別のボタンをクリックしてresponseViewEventTrigger
をトリガーします。それは正常にPOSTを行い、responseViewSuccess
に来て、それもモデルに格納します。しかし、それはフロントエンドには表示されません。 data.success
は依然として真ではありませんが、console.log(this.responseMessageView.model)
はそれを示しています。attributes->data->success = true
しかし、私がページをリフレッシュすると同じ動作がすべて完璧です。そのちょうどprimaryViewSuccess
が呼び出されたときにresponseViewSuccess
が呼び出されたときに最新のモデルの変更が反映されません。 つまり、モデルは更新されていますが、DOMは同じままです。
私はここで何が欠けていますか?御時間ありがとうございます!
あなたが意図的に 'responseMessageView'に新しいモデルを渡しているか、あなたが同じになるように、このコード内を参照しているモデルを期待しています..?あなたは 'this.model.set( 'data'、response.data);' 'this.responseMessageView.model.set( 'data'、response.data);'などを実行しているようで、混乱のように見えます...最初のコードブロックで 'initialize'を含んでいる*ものが何であるか分かりません... 2番目のコードブロックを含む*ものは何か分かりません。これらの間の関係を説明したいかもしれませんビュー、モデルなど最初に –
@tj私は質問を編集しました。私はあなたが何を意味するのか理解していないのですか? initialize()は、ページ全体と部分的なビューを宣言するために使用されます。私は自分自身をよく説明できない場合は申し訳ありません。 –
*物事*私はそれがビュー、コレクションなどであるかどうかを尋ねていました。あなたが "* primaryViewSuccessが呼び出された後、responseViewSuccessが最新のモデル変更をしていないということを意味していませんでした。ビューはどのモデルを変更していません..? 2つのビューと2つのモデルがあります。それに基づいて、誰に基づいて更新すべきかを説明してください。 –