3

前にステップをレンダリングした後、Marionette ItemView.open が $el.empty() を呼び出すのはなぜですか?

ItemView が表示されないので歯ぎしりをした後、マリオネット コードを実行しました。驚いたことに、ItemViewレンダリングされていました。以下は ItemView.show の一部です。

       show: function(view){

        this.ensureEl();

        if (view !== this.currentView) {
            this.close();
            view.render();  // <-- Much rejoicing! It showed up!
            this.open(view);

かっこいいので、デバッガーで続行を押して、バム! 私の見方はなくなった。open() メソッドで上書きされていたことが判明しました。

// Override this method to change how the new view is
// appended to the `$el` that the region is managing
   open: function(view){
        this.$el.empty().append(view.el);
   },

そこで、$el.empty() です。オーバーライドできることがわかりましたが、これが起こらない別のアプリがあります。したがって、empty() のコードを見ると、次のようになります。

// Remove element nodes and prevent memory leaks
   if ( elem.nodeType === 1 ) {
       jQuery.cleanData( getAll( elem, false ) ); //<-- Much sadness it disappeared. :(
   }

nodeType ===1 の意味を知っている人はいますか? 動作するアプリは nodeType===1 ではないようですが、ItemView が消えている現在のアプリは nodeType===1 です

私が何をすべきかについての提案はありますか?

  1. オープンをオーバーライドしますか? ものによって?他の何かを壊すことはないと確信できるほど、私はマリオネットについてよく知りません。

  2. nodeType を 1 以外に設定しますか? 他の設定は?

  3. ここであなたの提案は?:)

4

1 に答える 1

0

ビューから 1 行削除したところ、宣伝どおりに機能しました。私が削除した行?

// The DOM Element associated with this view
el: ".center_court",

これも region = content === .center_court です。App.content.show(view) を使用して、ビューをそれ自体に送信していました。したがって、ビューはそれが何であるかを知る必要はありません。デフォルトでは div を使用しており、私の地域では問題なく表示されます。

これをご覧いただきありがとうございます。誰かの役に立てば幸いです。

アンドリュー

于 2013-06-06T22:19:15.757 に答える