Durandal组成foreach

时间:2014-02-04 17:02:58

标签: knockout.js durandal

我循环遍历数组并通过合成

显示其内容
<!-- ko foreach: { data: datas} -->
    <div>
            <!-- ko compose: {
                model: 'show',
                activationData: {
                    bundle:bundle
                },                    
               } -->
            <!-- /ko -->
    </div>  
<!-- /ko -->

组合调用模型show.js,它将activationData包裹在一个observable中并将其显示在表格中

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>

一切正常,但是当我循环播放多个数据时,之前显示的所有合成都会显示最后一个元素的内容。我知道它与我使用bundle作为一个可观察的事实相关联,我怎么能将组合作为一个孤立的可观察对象发送到组合物?我错过了什么

1 个答案:

答案 0 :(得分:2)

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

以下是消息框docs中的另一个示例 -

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);
};