使用骨干和木偶,我创建了一个新的布局,进入我页面上的主要内容div。布局看起来像这样:
<div id='dash-sidebar'>
<div id='dash-profile'></div>
<div id='dash-nav'></div>
</div>
<div id='dash-content'></div>
问题是,当我渲染布局时,骨干会自动将其包装在div中,然后将其放入主内容div中,如下所示:
<div id='main-content'>
<div>
<div id='dash-sidebar'>
<div id='dash-profile'></div>
<div id='dash-nav'></div>
</div>
<div id='dash-content'></div>
</div>
</div>
我知道我可以使用tagName更改元素,但是否可以避免完全包装模板,直接将其插入页面上的主内容div中?
更新:木偶。布局是主干视图的扩展,因此这是正常行为,请参阅主干文档:
“el”属性引用在浏览器中创建的DOM对象。每根脊梁。js视图有一个“el”属性,如果未定义,则为主干。js将构造自己的div元素,它是一个空的div元素。
所以我之前的回答与你的问题无关,对不起。
更新:
在Backbone gitHub中发现了一个关于这个主题的问题546(wich被关闭了),jashkenas发布了这条评论来解释为什么它不容易实现:
使用主干视图的很大一部分优势在于,它们的元素在任何时候都是可用的——不管是否呈现了模板(许多视图都有多个模板)——不管视图是否存在于DOM中。
这允许您创建视图并将其添加到DOM中,稍后进行渲染,并确保所有事件都已正确绑定(因为它们是从view.el委派的)。
如果你能想出一个好的策略,允许视图拥有“完整”的模板,同时保留上述特征。。。然后,让我们来讨论它——但它必须允许根元素存在,而不必呈现模板的内容(这可能取决于稍后可能不会到达的数据),并且它必须允许一个视图轻松拥有多个模板。
编辑3:警告!这个答案可能已经过时了。我收到一条评论,说这个答案不再有效,也没有时间调查(我个人不使用这种方法)。
我喜欢使用Twitter/Bootstrap作为我的UI库,由于默认的标记包装(特别是
经过一些挖掘,我在
区域的木偶文档中找到了一些关于
视图如何附加
el
的内容。主干从各种视图
属性构建el
,并使构建的元素保持最新,以便随时呈现。所以我想,如果视图。el
是父对象,为什么不使用HTML内容呢?木偶网还提供了一种创建自定义区域的方法
我可以通过创建一个自定义的
区域
,使用一个覆盖的打开
函数来运行一切。这样,我就可以指定哪些区域需要用标记进行换行,哪些区域不需要。在下面的示例代码段中,我创建了我的自定义非包装区域
(NowrapRegion
),并将其用于我的布局
(MyLayout
)
var NowrapRegion = Marionette.Region.extend({
open: function(view){
this.$el.html(view.$el.html());
}
});
var MyLayout = Marionette.Layout.extend({
template: templates.mylayout,
regions: {
foo: '#foo',
columns: '#columns', //thead
rows: { selector: '#rows', regionType: NowrapRegion } //tbody
}
});
繁荣我想要的时候包装,不想要的时候不要。
编辑:这似乎会影响在
*视图
级别应用的事件。我还没有调查过,但请注意,他们似乎没有被触发。
我不确定这是否是一种“正确”的方式。如果@derick bailey看到这一点,我欢迎他提供任何反馈。
编辑2:@chris-neale建议如下,我还没有证实这一点,但它似乎是合理的。谢谢!
在子节点上使用深度克隆将维护事件和数据,而不是在视图中复制html。
var NowrapRegion = Marionette.Region.extend({
open: function(view){
view.$el.children().clone(true).appendTo(this.$el);
}
});
每个主干视图必须由单个元素表示。您的第一个HTML块有两个元素,这就是为什么如果不首先将其包装到外部div中,它就不能由视图表示。
你能重构你的布局,包括主内容
区域吗?然后Layout的el
将对应于整个外部div。
另一件要尝试的事情是使用骨干。View的setElement()方法重写外部div的创建,并手动为View中的元素注入所需的超文本标记语言。类似的东西:
onRender: function() {
this.setElement( /* the HTML you want for your layout */ );
}
但是,如果传入有两个父元素而不是只有一个父元素的超文本标记语言,我不确定这将如何工作。
问题内容: 有人知道如何获取元素的或文本吗?甚至更好;如何单击具有特定元素的元素?这就是普通JavaScript的工作方式: 在此先感谢您的帮助! 问题答案: 这就是我获取innerHTML的方式:
今天我开始学习ReactJS,一个小时后我就开始面对这个问题。。我想在页面上的div中插入一个有两行的组件。下面是我正在做的一个简化示例。 我有一个html: 渲染功能如下: 下面我调用渲染: 生成的HTML如下所示: 我不是一个非常高兴的问题,这个问题迫使我将所有内容都打包在一个div“DeadSimpleComponent”中。在没有显式DOM操作的情况下,最好且简单的解决方法是什么? 201
在ApacheFelixOSGi框架中,配置文件提供了在Felix生态系统中包含其他系统包的选项。Felix配置中的行如下所示: 我将当前的OSGi框架从Felix切换到EclipseEquinox,我发现我的一个捆绑包依赖于包,但在Equinox的(模糊的)配置文档中找不到任何与Felix中的设置等效的东西。有人知道Equinox的方式包括这个额外的包吗? 如果您正在查看我在上面共享的链接(到E
问题内容: 我试图将变量传递到Puppeteer中的函数中,但是当我使用以下非常简单的示例时,该变量未定义。 我是Puppeteer的新手,找不到任何可构建的示例,因此我需要帮助将该变量传递到函数中,以便在内部使用它。 问题答案: 您必须像这样将变量作为参数传递给:
我被要求评估Robotframework,并对我所看到的大部分情况感到满意。然而,为了让它成为一个可行的选择,我需要它在Firefox中工作。 提线木偶功能在我的Ruby/Capybara环境中是一个问题,我能够关闭它。 在Robot/Python 2.7/FF44.0中获取相同的内容会在两个方向上产生错误。 当提线木偶上演时: 我明白了: 我们的产品摇滚失败WebDriverException:
我需要解析一个一列的CSV文件,它不仅有额外的逗号,而且一些名称还包括额外的引号。我已经看过了,并阅读了之前的其他问题,最好的答案之一是阿钦蒂亚·杰哈的答案。然而,这种解决方案似乎在我的情况下不起作用。一个例子是这个名字 正在打印为: 它在正确的地方分裂,并且正在处理额外的逗号,但它没有击中额外的引号,并且现在也在那里分裂,所以
运行新页时,必须使用函数指定视口的大小:
Marcin Grzejszczak谈论Spring Cloud Sleuth和Zipkin 点击此处查看视频