ASP.Net Web Api + KnockoutJs + MVC4 - 将它绑在一起

时间:2012-08-17 00:48:43

标签: asp.net-mvc knockout.js asp.net-web-api knockout-mapping-plugin

我正在开始一个新项目,并且热衷于使用对我来说很新的KnockoutJS + Web Api,我对Web Api有很好的理解,但Knockout目前很难理解。

这是我对如何使用我的应用程序的初步想法:

  • 我有一个标准的MVC控制器,例如LeadsController
  • LeadsControllerAction名为ListLeads,但实际上并没有返回任何数据,只是返回一个带有模板的视图来显示来自Knockout的数据。
  • ListLeads视图通过ajax调用我的api控制器LeadsApiController以获取要显示的潜在客户列表
  • 然后将潜在客户数据映射到KnockoutJs ViewModel(我不想将我的视图模型从服务器端复制到JavaScript视图模型中)
  • 我想尽可能多地使用外部JavaScript文件,而不是让我的HTML页面充满了JavaScript。

我见过很多例子,但大多数都是在第一页加载时返回一些初始数据,而不是通过ajax调用。

所以我的问题是,当从ajax中检索时,如何为Knockout创建我的JavaScript viewModel,其中ajax url是使用Url.Content()创建的。

另外,如果我需要在此ViewModel上有额外的计算值,我将如何从服务器端扩展映射的视图模型。

如果我没有很好地解释自己,请告诉我你不确定的内容,我会尝试更新我的问题,以便更明确。

1 个答案:

答案 0 :(得分:1)

对于网址问题,请在_Layout.cshtml中将其添加到将使用它的文件之前的位置:

<script>
    window._appRootUrl = '@Url.Content("~/")';
</script>

然后,您可以使用window._appRootUrl使用字符串连接或借助URI.js等javascript库来构建网址。

对于其他计算值,您可能希望使用knockout computed observable。如果那是不可能的,或者您更喜欢在.Net中执行此操作,那么您应该能够仅使用getter创建一个属性,但是当您更新客户端上的其他属性时,如果它依赖于它们,则不会更新。