model-view-controller - knockoutjs 的无容器语句在 hottowel SPA 中不起作用?

标签 model-view-controller knockout.js breeze durandal hottowel

我正在尝试使用像 <!--ko if:IsShowData==true --> 这样的无容器语句 Hot Towel 模板中的 knockoutjs 但如果我使用可见绑定(bind)与某些元素(如 div)则它不会工作,那么它工作得很好。(<div data-bind="visible: IsShowData==true"></div>)

谁能告诉我 knockoutjs 的无容器语句是否在 Hot Towel 模板中不起作用?

在默认 Hot Towel 模板中,我在 home.html 和 home.js 中添加了几行如下:

views/home.html

<section>
    <h2 class="page-title" data-bind="text: title"></h2>
</section>

<!-- ko if: active()==true -->
hiiiiiiiiiiiiiii
<!--/ko-->


<div data-bind="visible: active() == true">
    byeeeeeeeeeeeee
</div>

在 viewmodels/home.js 文件中

define(['services/logger'], function (logger) {
    var vm = {
        activate: activate,
        active:ko.observable(false),
        title: 'Home View'
    };

    return vm;

    //#region Internal Methods
    function activate() {
        logger.log('Home View Activated', null, 'home', true);
        return true;
    }
    //#endregion
});

我会看到 hiiiiiiiii 但我不会看到 byeeeeee

最佳答案

您的问题与 Knockout 或 if 无关contenerless 绑定(bind),但 Durandal.js(由 HotTowel 模板使用)以及 Durandal 如何处理 View 模型。

因为在 Durandal.js 中,您的viewmodel 应该只包含一个根元素,并且它会删除根级注释。

来自documentation :

The view has exactly one root element. Durandal requires this. If comments are found at the root, they will be removed. In the case where more than one root element is found, they will be wrapped in a div.

所以解决方案很简单:只需在 section 中添加两个文本即可或将所有内容包装成 divsection :

<section>
    <h2 class="page-title" data-bind="text: title"></h2>

    <!-- ko if: active()==true -->
         hiiiiiiiiiiiiiii
    <!--/ko-->


    <div data-bind="visible: active() == true">
         byeeeeeeeeeeeee
   </div>
</section>

或者

<div>
     <section>
        <h2 class="page-title" data-bind="text: title"></h2>
     </section>

    <!-- ko if: active()==true -->
       hiiiiiiiiiiiiiii
    <!--/ko-->


     <div data-bind="visible: active() == true">
        byeeeeeeeeeeeee
    </div>
</div>

顺便说一句而不是if: active()==truevisible: active() == true你可以简单地写:if: activevisible: active

关于model-view-controller - knockoutjs 的无容器语句在 hottowel SPA 中不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17271248/

相关文章:

model-view-controller - 差异化执行如何工作?

c# - MVC View 继承

binding - 如何在 knockout.js 中进行条件绑定(bind)?

knockout.js - $parent 绑定(bind)不能像我想的那样工作,为什么?

javascript - knockout 过滤阵列问题

breeze - Breeze :子实体已被其他人删除后,在重新加载父实体后它们仍然出现

c# - 格式化字符串/电话号码

angularjs - 我的 Breeze 脚本中不推荐使用的方法的版本问题

breeze - 进行 http 调用时出错 : Metadata query failed for:

PHP - MVC 应用程序中工作单元应位于何处?