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