Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 覆盖木偶区域';主干中的s getEl方法。木偶_Javascript_Layout_Backbone.js_Marionette_Regions - Fatal编程技术网

Javascript 覆盖木偶区域';主干中的s getEl方法。木偶

Javascript 覆盖木偶区域';主干中的s getEl方法。木偶,javascript,layout,backbone.js,marionette,regions,Javascript,Layout,Backbone.js,Marionette,Regions,我已经建立了一个项目,在这个项目中我扩展了一个包含两个不同区域的主干.marionete.Layout。此布局可以在整个应用程序中用作组件。特别是,区域的设置如下所示 regions : { masterRegion : { selector: '[data-region=master]' }, slaveRegion: { selector: '[data-region=slave]' } }, 特别是,我使用数据区域选择器来注入我感兴趣的视图 当在树结构中使用这种布

我已经建立了一个项目,在这个项目中我扩展了一个包含两个不同区域的
主干.marionete.Layout
。此布局可以在整个应用程序中用作组件。特别是,区域的设置如下所示

regions : {
    masterRegion : { selector: '[data-region=master]' },    
    slaveRegion: { selector: '[data-region=slave]' }
},
特别是,我使用
数据区域
选择器来注入我感兴趣的视图

当在树结构中使用这种布局时,视图会被复制,因为
getEl
函数将错误的区域写入视图。显然这是我的错,在
木偶
(v1.1.0)文档中写了以下内容

如果我们有一个parentEl,则重写getEl函数这必须是 重写以确保在首次使用时找到选择器 区域如果我们尝试将区域的el分配给parentEl.find(选择器) 在构建区域的对象文本中,元素将不会 保证已经在DOM中,并且会导致问题

其中
getEl
定义为

getEl: function(selector){
    return Marionette.$(selector);
}
因此,我的问题如下。这是什么意思?如何重写此方法?执行这种超控的正确位置在哪里


希望这是清楚的。

以下是我对这一点的理解:

  • 以下几点适用于布局包含在另一个元素中的情况(“如果我们有父元素”)
  • 第一次使用区域时,Marionette需要根据选择器字符串选择要填充的适当DOM元素(“确保在第一次使用区域时找到选择器”)
  • 您不能简单地在parentEl中查找选择器(“如果我们尝试在对象文本中将区域的el分配给parentEl.find(选择器)),因为我们想要的DOM元素不一定在DOM中(“该元素将不能保证已经在DOM中”)
换句话说,第一次使用区域时(例如,通过调用
show
方法),木偶网需要构建一个区域实例并将其与正确的DOM元素关联(由
选择器
属性指定)

但是,在木偶网可以在包含的父元素中查找DOM元素之前,它必须确保已加载所有必需的DOM元素(最重要的是我们正在查找的那个)

这对你更有意义吗

根据flexaddicted的评论进行编辑

你能给我一个正确的方法来实现这一点吗?有吗 覆盖以下方法的方式

我认为你不需要重写这个方法。注释指出了为什么在构建区域时,DOM元素是以这种方式获取的,而不是通过直接赋值获取的,但是它仍然可以在树结构中正常工作(因为父元素仍然可以正确确定)

我认为问题可能出在您的区域选择器上:由于它是“泛型”的,因此它可能会匹配多个元素(而不是使用只应匹配1个元素的
id
属性进行选择),并且可能会匹配您不期望的DOM元素,例如子视图。(这当然取决于木偶网何时查看DOM以获取选择器。)


此外,如果可能的话,我会考虑使用一个复合视图来满足您的树结构需求。请参见和

以下是我对此的理解:

  • 以下几点适用于布局包含在另一个元素中的情况(“如果我们有父元素”)
  • 第一次使用区域时,Marionette需要根据选择器字符串选择要填充的适当DOM元素(“确保在第一次使用区域时找到选择器”)
  • 您不能简单地在parentEl中查找选择器(“如果我们尝试在对象文本中将区域的el分配给parentEl.find(选择器)),因为我们想要的DOM元素不一定在DOM中(“该元素将不能保证已经在DOM中”)
换句话说,第一次使用区域时(例如,通过调用
show
方法),木偶网需要构建一个区域实例并将其与正确的DOM元素关联(由
选择器
属性指定)

但是,在木偶网可以在包含的父元素中查找DOM元素之前,它必须确保已加载所有必需的DOM元素(最重要的是我们正在查找的那个)

这对你更有意义吗

根据flexaddicted的评论进行编辑

你能给我一个正确的方法来实现这一点吗?有吗 覆盖以下方法的方式

我认为你不需要重写这个方法。注释指出了为什么在构建区域时,DOM元素是以这种方式获取的,而不是通过直接赋值获取的,但是它仍然可以在树结构中正常工作(因为父元素仍然可以正确确定)

我认为问题可能出在您的区域选择器上:由于它是“泛型”的,因此它可能会匹配多个元素(而不是使用只应匹配1个元素的
id
属性进行选择),并且可能会匹配您不期望的DOM元素,例如子视图。(这当然取决于木偶网何时查看DOM以获取选择器。)


此外,如果可能的话,我会考虑使用一个复合视图来满足您的树结构需求。您好,大卫,谢谢您的回复+1.你能给我一个正确的方法来实现这一点吗?有什么方法可以替代下面的方法吗?戴维斯,非常感谢。我还将查看上述来源。祝你有愉快的一天。抱歉最后的“s”,大卫;)你好,大卫,谢谢你的回复+1.你能给我一个正确的方法来实现这一点吗?有什么方法可以替代下面的方法吗?戴维斯,非常感谢。我还将查看上述来源。祝你有愉快的一天。抱歉最后的“s”,大卫;)