2013-02-18 31 views
0

我正在一個項目,需要Asp.Net WebForms(是一個巨大的.net 2.0網站的遷移,沒有時間在MVC中重新實現)和asmx Web服務。當請求頁面被服務器發送並且像SPA一樣工作時。過了一段時間,我們意識到我們需要javascript後面的模型來避免噩夢代碼。我們嘗試了Knockout.js,直到遇到一個我們無法解決的問題:使用用戶控件和Knockout.js查看模型進行代碼重用。我們的用戶控件具有視圖模型,當幾個用戶控件組合在一個頁面中時。敲除根本不起作用。我知道,在製作SPA網絡應用程序時,webforms可能不是典型的堆棧,但是...需求是需求....任何幫助?MV *框架ASP.Net WebForms - 代碼重用

+0

當您將視圖模型應用於頁面時,您可以通過執行'ko.applyBindings(viewModel,document.getElementById(「DIVwrapperaroundusercontrolmarkup」));''將分離視圖模型應用於頁面的一部分;'' – 2013-02-18 14:31:18

回答

0

我會做什麼,在你的方案(因爲我已經做到了自己在過去):

具有全局視圖模型對象,說:

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> 

這將會爲您的方案工作。