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. 覆盖打开?什么?我对 Marionette 的了解还不够深入,无法确信我不会破坏其他东西。

  2. 将 nodeType 设置为 1 以外的值?还有什么设置?

  3. 你的建议在这里?:)

4

1 回答 1

0

我从我的视野中删除了一条线,它像宣传的那样工作。我删除的行?

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

那也是区域=内容=== .center_court。使用 App.content.show(view) 我将视图发送给它自己。所以现在 View 不需要知道它是什么 el 。默认情况下,它使用 div 并且在我所在的地区会显示得很好。

感谢您查看此内容,希望它对某人有所帮助。

安德鲁

于 2013-06-06T22:19:15.757 回答