2014-01-27 110 views
0

我正在尝试使用Durandal生成数据列表。因为这个数据会被对话框更新,我需要列表项来表示一个视图模型。为此,查看构图似乎是合适的,但我必须错过如何做到这一点。注意:我使用ASP .NET MVC,所以我的路径有点不同。然而,在这一点上,我没有看到我的观点的任何网络请求也不是调试器;我的视图模型中的行被击中。Durandal List with Composition(ASP .NET MVC)

下面是代码: 的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.ac为了将虚拟机添加到我的可观察数组中,这未能显示任何结果。我的想法是,我需要组合,所以我得到绑定每行火。 (这可能是错误的)。我真的想找一个这个工作的例子。非常困惑,我无法在SO或Google上找到任何东西。

在此先感谢

回答

0

1)检查工作项目确实包含数据。使用一个简单的div foreach输出结果。

2)是否有你不使用Singleton模式的原因?

3)从启动中返回一个承诺,以确保在开始构图之前加载数据。

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

只是注意到你说调试语句没有被击中。代码中的某处出现错误。你能发布完整的viewmodel吗?还要留意控制台窗口中的任何错误,并检查网络选项卡以确保所有文件都正确加载。你发布的代码应该可以工作。 –

+0

所以,你是对的,我确实发现了错误,并且已经解决。但是,我的问题仍然存在。我需要被推入observablearray的项目是视图模型,阅读它需要有淘汰赛观察。虽然我已经设法实现这一点,但我无法弄清楚如何将数据流入虚拟机。任何帮助? – xximjasonxx

0

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

你能提交你的代码吗?