我正在尝试使用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上找到任何东西。
提前致谢
答案 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 /路由?
你能提交你的代码吗?