Durandal 作文 foreach

Posted

技术标签:

【中文标题】Durandal 作文 foreach【英文标题】:Durandal composition foreach 【发布时间】:2014-02-28 19:02:05 【问题描述】:

我正在遍历一个数组并通过组合显示其内容

<!-- ko foreach:  data: datas -->
    <div>
            <!-- ko compose: 
                model: 'show',
                activationData: 
                    bundle:bundle
                ,                    
                -->
            <!-- /ko -->
    </div>  
<!-- /ko -->

该组合调用了一个模型 show.js,该模型将 activationData 包包装在一个可观察对象中并将其显示在一个表格中

function (logger, utils) 
    var bundle = ko.observable();

    var activate = function (data) 
        // process data.bundle further 
        bundle(populateBundle(data.bundle));
    ;

show.html

<table class="table table-bordered">
    <tbody>        
        <!-- ko foreach: data:bundle().groups, as:'group' -->
        <tr>
            <td class="tolerances-values" align="center"><span data-bind="text: group.name"></span></td>
            <td class="tolerances-values" align="center"><span data-bind="text: group.code"></span></td>

        </tr>
        <!-- /ko -->
    </tbody>
</table>

一切正常,但是当我循环多个数据时,之前显示的所有组合都会显示最后一个元素的内容。我知道这与我将捆绑包用作可观察对象这一事实有关,但我如何才能让组合将发送到组合的每个捆绑包都视为孤立的可观察对象?我有什么遗漏吗

【问题讨论】:

【参考方案1】:

原因是您没有在视图模型中使用构造函数。您需要创建一个对象并将诸如激活之类的东西附加到它的原型上,而不是您正在执行的方式。在这里查看示例 - http://durandaljs.com/documentation/Using-Composition.html

这是消息框文档中的另一个示例 -

var MessageBox = function(message, title, options) 
    this.message = message;
    this.title = title || MessageBox.defaultTitle;
    this.options = options || MessageBox.defaultOptions;
;

MessageBox.prototype.selectOption = function (dialogResult) 
    dialog.close(this, dialogResult);
;

【讨论】:

以上是关于Durandal 作文 foreach的主要内容,如果未能解决你的问题,请参考以下文章

淘汰 Durandal 撰写视图 $root 访问权限

Durandal:在一个孩子中创建功能并从另一个孩子中消费

Durandal 路由 IF 语句

如何使 jQuery AutoComplete 功能在 Durandal 中工作?

Karma + Jasmine + Durandal + KnockoutJS + RequireJS 单元测试中不匹配的匿名 define() 模块

html Durandal.JS运行模态的示例。