为什么Marionette ItemView.open在之前渲染步骤后​​调用$ el.empty()?

时间:2013-06-06 12:26:56

标签: javascript marionette

为什么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);

很酷,所以我在调试器和bam上继续点击!我的观点消失了。事实证明它在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. 你的建议在这里? :)

1 个答案:

答案 0 :(得分:0)

我从我的视图中删除了一行,并按宣传方式工作。我删除了哪一行?

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

这也是region = content === .center_court。 使用App.content.show(view)我将视图发送给自己。所以现在View不需要知道它是什么。默认情况下,它使用div,在我的区域显示正常。

感谢您查看此内容,希望它可以帮助某人。

安德鲁