【问题标题】:MV* Framework for ASP.Net WebForms - Code Reuse用于 ASP.Net WebForms 的 MV* 框架 - 代码重用
【发布时间】:2013-02-18 14:24:33
【问题描述】:

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

【问题讨论】:

  • 当您将视图模型应用到页面时,您可以通过 ko.applyBindings(viewModel, document.getElementById("DIVwrapperaroundusercontrolmarkup")); 将挖空视图模型仅应用到页面的一部分

标签: javascript asp.net knockout.js mv


【解决方案1】:

在你的场景中我会做什么(因为我过去自己做过):

有一个全局 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>

这将适用于您的场景。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多