带有组合的Durandal列表(ASP .NET MVC)

时间:2014-01-27 21:58:14

标签: javascript durandal

我正在尝试使用Durandal生成数据列表。因为这个数据将通过对话框更新,所以我需要列表项来表示视图模型。为此,视图合成似乎是合适的,但我必须遗漏一些如何做到这一点。注意:我使用的是ASP .NET MVC,所以我的路径有点不同。但是,此时,我没有看到任何Web请求,也不是调试器;我的视图模型中的行被击中。

这是代码: HTML:

<tbody data-bind="foreach: workItems">
    <!-- ko compose: {model: 'viewmodels/project/workItem', view: 'views/project/workitem'} -->
    <!-- /ko -->
</tbody>

以下是用于表示列表中每一行的视图模型的JS:

define(['knockout'], function(ko) {
    var vm = function () {
        var that = this;
        this.activate = function(ctx) {
            debugger;
        };
    };

    return vm;
});

以下是处理返回数据的GET请求的代码:

this.activate = function (ctx) {
    var q = null;

    if (ctx == undefined) {
        q = that._getCurrent();
    } else {
        q = that._getPath(ctx);
    }

    q.then(function (response) {
        that.workItems(response);
        app.trigger('viewmodel:loadingComplete');
    });
};

我尝试过使用system.acquire将VM添加到我的可观察数组中,但未能显示任何结果。我的想法是我需要组合,所以我得到了每条线的绑定。 (这可能是错的)。我真的在寻找这个工作的一个例子。非常困惑的是我无法在SO或Google上找到任何东西。

提前致谢

2 个答案:

答案 0 :(得分:0)

1)检查workItems确实包含数据。使用简单的div foreach输出结果。

2)您是否有理由不使用Singleton模式?

3)从激活中返回一个promise,以确保在开始合成之前加载数据。

define(['knockout'], function (ko) {

var items = ko.observableArray([]);

var activate = function() {
    console.log("calling composelist:activate");
    items.push({name:"Hello"});
    items.push({name:"world"});
};

return  {
    activate: activate,
    items: items
    };
});

答案 1 :(得分:0)

您是否尝试根据url参数加载不同的v / vm?如果是这样,为什么不使用基本的shell /路由?

你能提交你的代码吗?