0

我正在从事一个需要 Asp.Net WebForms 的项目(这是一个巨大的 .net 2.0 站点的迁移,没有时间在 MVC 中重新实现)和 asmx Web 服务。当请求页面时,服务器会发送一个页面,并像 SPA 一样工作。过了一段时间,我们意识到我们需要一个 javascript 背后的模型来避免噩梦般的代码。我们尝试了 Knockout.js,直到遇到一个我们无法解决的问题:用户控件和 Knockout.js 视图模型的代码重用。我们的用户控件具有视图模型,当多个用户控件组合在一个页面中时。淘汰赛根本行不通。我知道在制作 SPA 网络应用程序时,网络表单可能不是典型的堆栈,但是……需求就是需求……有什么帮助吗?

4

1 回答 1

0

在您的情况下,我会做什么(因为我过去自己做过):

有一个全局 ViewModel 对象,比如:

var _ViewModel = {}

对于您的每个控件,都有一个设置 ViewModel 部分的函数,即(这在 .ascx 中并指向一个 JS 文件函数)

<script language="javascript">
var _ViewModel // this should be in a global.js file or something.
SetupThisViewModel()
ko.applyBindings(_ViewModel);
</script>

在 JS 文件中:

// Used for user  control 1
function SetupThisViewModel()
{
    _ViewModel.testItem = ko.observable('');
}

// Used for user control 2
function SetupThisViewModel2()
{
    _ViewModel.testItem2 = ko.observable('');
}

而且,如果您想在一个页面上有两个用户控件,只需执行以下操作:

<script language="javascript">
    var _ViewModel // this should be in a global.js file or something.
    SetupThisViewModel();
    SetupThisViewModel2();
    ko.applyBindings(_ViewModel);
    </script>

这将适用于您的方案。

于 2013-02-18T14:36:42.120 回答