【问题标题】:Durandal does not compose footer view after main content was composed编写主要内容后,Durandal 不编写页脚视图
【发布时间】:2013-04-29 06:15:42
【问题描述】:

我有一个像这样的 durandal shell 视图:

<div id="global">
<!-- ko compose: {view: 'nav'} -->
<!-- /ko-->
<div id="main" class="container">
    <!--ko compose: {model: router.activeItem, 
        afterCompose: router.afterCompose,
        transition: 'entrance'} -->
    <!-- /ko-->
</div>
<div id="push"></div>
 </div>
  <!-- ko compose: {view: 'footer'} -->
  <!-- /ko-->

'nav' 和 'footer' 是单独的 html 视图。当我运行该站点时,它工作正常,只是从未显示页脚 html。但是,当我这样说时,页脚正在显示(虽然页面布局当然是错误的):

<div id="global">
<!-- ko compose: {view: 'nav'} -->
<!-- /ko-->
<!-- ko compose: {view: 'footer'} -->
 <!-- /ko-->
<div id="main" class="container">
    <!--ko compose: {model: router.activeItem, 
        afterCompose: router.afterCompose,
        transition: 'entrance'} -->
    <!-- /ko-->
</div>
<div id="push"></div>

 </div>

当我将页脚的 html 代码直接粘贴到 shell 中时,它当然也可以工作。

【问题讨论】:

    标签: asp.net-mvc-3 asp.net-mvc-4 knockout.js durandal


    【解决方案1】:

    Durandal 视图应该有一个根元素http://durandaljs.com/documentation/Creating-A-View

    视图只有一个根元素。杜兰达尔需要这个。如果 cmets 在根目录中找到,它们将被删除。在这种情况下 如果找到多个根元素,它们将被包裹在一个 分区。

    compose 页脚指令是global 之外的注释,因此将被删除。将它移到 `#global' 中应该可以解决问题。

    <div id="global">
    <!-- ko compose: {view: 'nav'} -->
    <!-- /ko-->
    <div id="main" class="container">
        <!--ko compose: {model: router.activeItem, 
            afterCompose: router.afterCompose,
            transition: 'entrance'} -->
        <!-- /ko-->
    </div>
    <div id="push"></div>
    <!-- ko compose: {view: 'footer'} -->
      <!-- /ko--> 
    </div>
    

    作为替代方案,您可以将所有内容包装到另一个 div 元素中,以实现没有注释规则的单个根元素。

    <div>
    <div id="global">
    <!-- ko compose: {view: 'nav'} -->
    <!-- /ko-->
    <div id="main" class="container">
        <!--ko compose: {model: router.activeItem, 
            afterCompose: router.afterCompose,
            transition: 'entrance'} -->
        <!-- /ko-->
    </div>
    <div id="push"></div>
     </div>
      <!-- ko compose: {view: 'footer'} -->
      <!-- /ko-->
    </div>
    

    【讨论】:

    • RTFM 我猜 :) 谢谢,我选择了第二个选项
    • @fhoetzing - 不要出汗。 :) 类似的东西在 Durandal 等新框架中很容易被忽略
    • 所以看起来您正在将其添加到shell.html... 是否可以将其添加到包含shell.html 的文件中?例如:&lt;body&gt; ... &lt;div id="applicationHost"&gt;...&lt;/div&gt; &lt;!-- THIS HERE --&gt;&lt;div&gt;&lt;div data-bind="compose: 'partials/globalNav.html'"&gt;&lt;/div&gt;&lt;/div&gt; ... &lt;/body&gt;。我问的原因是因为我认为我可以将 compose 简单地用作任何地方的包含(就像 ng-include 用于 Angular)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-19
    • 1970-01-01
    • 1970-01-01
    • 2017-07-06
    • 1970-01-01
    相关资源
    最近更新 更多